2016-01-12 2 views
0

Я пытаюсь установить ключ в NSUserDefaults. В журнале консоли отображается ключ auto_reset_switch, установленный на «YES», когда я регистрирую значения по умолчанию. Однако, когда я позже прочитал значения по умолчанию, ключ auto_reset_switch будет «0». Я попытался установить ключ как BOOL или как NSString, но это не имеет значения. Я следую за текстом в книге «iOS Programming Big Nerd Ranch Guide 4th edition». Что я делаю не так?Настройки предпочтений ключ не сохранен iOS

Вот appDelegate.h:

// 
// NRCAppDelegate.h 
// LifeWatch 
// 
// Created by Nelson Capes on 10/13/2015. 
// Copyright © 2015 Nelson Capes. All rights reserved. 
// 

#import <UIKit/UIKit.h> 
#import "NRCAlertView.h" 
extern NSString * const NRCAutoResetSwitch; 

@interface NRCAppDelegate : UIResponder <UIApplicationDelegate> 

@property (strong, nonatomic) UIWindow *window; 

@end 

Здесь ключ быть установлен в appDelegate.m:

// 
// NRCAppDelegate.m 
// LifeWatch 
// 
// Created by Nelson Capes on 10/13/2015. 
// Copyright © 2015 Nelson Capes. All rights reserved. 
// 

#import "NRCAppDelegate.h" 
#import "NRCItemsViewController.h" 
#import "NRCItemStore.h" 
#import "NRCImageStore.h" 
#import "NRCAppDelegate.h" 
NSString * const NRCAutoResetSwitch = @"auto_reset_switch"; 
@class NRCItemsViewController; 
@implementation NRCAppDelegate 

+(void)initialize 
{ 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSLog(@"defaults %@", [defaults 
          dictionaryRepresentation]); 

    NSDictionary *factorySettings = @{NRCAutoResetSwitch : @"YES"}; 

    [defaults registerDefaults:factorySettings]; 

    NSLog(@"defaults %@", [defaults 
          dictionaryRepresentation]); 

} 

А вот лог консоли (часть) после регистрации по умолчанию , Примечание ** auto_reset_switch = YES»

2016-01-12 17:23:16.088 LifeWatch[373:20370] defaults { 

    NSPersonNameDefaultDisplayNameOrder = 2; 
    PKEnableStockholmSettings = 1; 
    "auto_reset_switch" = YES; 
    "com.apple.content-rating.AppRating" = 1000; 
    "com.apple.content-rating.ExplicitBooksAllowed" = 1; 
    "com.apple.content-rating.ExplicitMusicPodcastsAllowed" = 1; 
    "com.apple.content-rating.MovieRating" = 1000; 
    "com.apple.content-rating.TVShowRating" = 1000; 
} 

А вот код для чтения по умолчанию:

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; 
NSLog(@"defaults %@", [defaults 
     dictionaryRepresentation]); 

Но теперь журнал консоли показывает "auto_reset_switch = 0":

NSPersonNameDefaultDisplayNameOrder = 2; 
PKEnableStockholmSettings = 1; 
"auto_reset_switch" = 0; 

ответ

0

Предполагая, что вы хотите, чтобы это значение было BOOL вместо строкового значения, измените @"YES" на @YES. Это сделает его BOOL (обертывание в NSNumber вместо NSString.

NSDictionary *factorySettings = @{NRCAutoResetSwitch : @YES}; 
+0

Спасибо за помощь! –

0

Я нашел этот ответ на StackOverflow (я не знаю, как связать с ним, так что я не пытаюсь взять кредит для ответа. Код работает хорошо.

Я думаю, что пример в моем OP неправильный код.

- (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) 
     { 
      [defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key]; 
     } 
    } 

    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister]; 

}