- [NSUserDefault registerDefaults:]不起作用?

时间:2010-10-14 13:35:26

标签: ios nsuserdefaults

我的代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
                                 [NSNumber numberWithBool:YES], @"show_outer_reference_circle_preference",
                                 [NSNumber numberWithBool:YES], @"show_seconds_circle_preference",
                                 nil];

    NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];
    [prefs registerDefaults:appDefaults];

    [glView startAnimation];
    return YES;
}

并且进一步下来我使用以下代码轮询NSUserDefaults:

    NSUserDefaults * userDefaults = [[NSUserDefaults standardUserDefaults] retain]; 
    NSNumber* optionsBoolValue = [userDefaults objectForKey:@"show_outer_reference_circle_preference"];
    NSAssert(optionsBoolValue != nil, @"AAAAHH");
    //...
    [userDefaults release];

设置无法通过。正如你所看到的,我将值设置为YES,buuuuttt设置为零,应用程序就像“AAAAHH”。

我做错了什么?

提前致谢,

-Nick

1 个答案:

答案 0 :(得分:1)

正如您所看到的,代码的第一部分就在didFinishLaunching之后。但是,代码的“读出”部分(问题中的第二个块)位于对象的init方法中,该对象是由加载nib而创建的,因此在 > didFinishLaunching,因此像“AAAAHHH”。

为了解决这个问题,我使用一个静态方法创建了一个对象来设置userDefaults,并在我读取任何设置之前调用它。