SORU
4 ŞUBAT 2009, ÇARŞAMBA


Ayarları ayarları yapabilirsiniz.sen don't bile paket varsayılan Ayarlar Uygulaması açın

Bir ayarları ile bir iPhone uygulaması var.benim uygulama için çeşitli ayarlar işleyen bir paket. Benim kök dizininde varsayılan değerler ayarlayabilirsiniz.dosya (Önek özelliğini kullanarak), plist, ama bu sadece kullanıcı ayarları uygulaması açılır ilk zaman alışmak. Bu değerler uygulama yüklerken yazılı çıkmak için herhangi bir yolu var mı? Sadece benim app ilk lansmanı için kontrol eder ve onları yaz sonra bu kodu yazabilirim biliyorum, ama o zaman iki farklı yerde.

İşte benim kökten bir giriş.örnek olarak plist:

<dict>
    <key>Type</key>
    <string>PSToggleSwitchSpecifier</string>
    <key>Title</key>
    <string>Open To Top Location</string>
    <key>Key</key>
    <string>open_top_location</string>
    <key>DefaultValue</key>
    <string>YES</string>
    <key>TrueValue</key>
    <string>YES</string>
    <key>FalseValue</key>
    <string>NO</string>
</dict>

Sonuç ise 'open_to_top_location' EVET, yerine kullanıcı Ayarları uygulaması ilk kez açıldığında kadar hiç orada değildi. istersem o olmalı

Herhangi bir fikir?

CEVAP
4 ŞUBAT 2009, ÇARŞAMBA


Eğer seni doğru anladıysam, varsayılan değerler iki kez belirtilen zorunda kalmak istemezsiniz "" Ayarlar.tuşları Önek olarak (bir kez paket/Root.plist dosya ve uygulaması başlatma kodunuzu bir kez) senkronize halde tutmak zorunda değilsiniz.

Ayarları Beri.paket uygulama paketi kendi içinde saklı, sadece varsayılan değerler göz önüne alındığında okuyabilirsiniz. Birlikte Ayarları paket bakar ve her anahtar için varsayılan değerler okuyan bazı örnek kod koydum. Bu varsayılan anahtarları dışında yazmaz; eğer yok ise, okumak gerekir unutmayın ve her açılışında onlara (bunu değiştirmek için çekinmeyin) kayıt. Sadece biraz üstünkörü testleri yaptım, her durumda sizin için çalışıyor emin olun.

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
    NSString *name = [[NSUserDefaults standardUserDefaults] stringForKey:@"name"];
    NSLog(@"name before is %@", name);

    // Note: this will not work for boolean values as noted by bpapa below.
    // If you use booleans, you should use objectForKey above and check for null
    if(!name) {
        [self registerDefaultsFromSettingsBundle];
        name = [[NSUserDefaults standardUserDefaults] stringForKey:@"name"];
    }
    NSLog(@"name after is %@", name);
}

- (void)registerDefaultsFromSettingsBundle {
    NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
    if(!settingsBundle) {
        NSLog(@"Could not find Settings.bundle");
        return;
    }

    NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]];
    NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];

    NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];
    for(NSDictionary *prefSpecification in preferences) {
        NSString *key = [prefSpecification objectForKey:@"Key"];
        if(key && [[prefSpecification allKeys] containsObject:@"DefaultValue"]) {
            [defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key];
        }
    }

    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister];
    [defaultsToRegister release];
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jorrit Jongma

    Jorrit Jongm

    17 Ocak 2008
  • manadude21

    manadude21

    11 Mart 2008