registerDefaults保存一个数字

时间:2011-09-30 17:13:05

标签: objective-c nsuserdefaults

我创建了一个简单的项目,使用“+”和“ - ”按钮增加或减少number内的label

我想测试registerDefaults方法,但如果我点击“主页”按钮,然后从模拟器返回项目(使用我的应用程序图标),屏幕上的数字仍然相同

如何使用此示例测试用户设置?或者它是模拟器的东西,或者如果我使用设备并等待内存警告方法自动刷新项目它会工作,然后它会工作吗?

这是我的一些代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    NSNumber *testValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"kRestore"];
    if (testValue){
        NSLog(@"already");
        viewController.myNum = (int)testValue;
    } else {
        NSLog(@"empty");
        viewController.myNum = 0;
    }

    return YES;
}


- (void)applicationWillResignActive:(UIApplication *)application {

    NSNumber *num = [NSNumber numberWithInt:viewController.myNum];

    NSDictionary *savedNumber = [NSDictionary dictionaryWithObject:num forKey:@"kRestore"];
    [[NSUserDefaults standardUserDefaults] registerDefaults:savedNumber];
    [[NSUserDefaults standardUserDefaults] synchronize];

    NSLog(@"ok resign active");
}

由于

3 个答案:

答案 0 :(得分:1)

尝试设置viewController.myNum = [testValue intValue];,而不是使用(int)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    NSNumber *testValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"kRestore"];
    if (testValue){
        NSLog(@"already");
        viewController.myNum = [testValue intValue];
    } else {
        NSLog(@"empty");
        viewController.myNum = 0;
    }
    return YES;
}

然后就像这样使用setObject:forKey:

- (void)applicationWillResignActive:(UIApplication *)application {
    NSNumber *num = [NSNumber numberWithInt:viewController.myNum];
    [[NSUserDefaults standardUserDefaults] setObject:num forKey:@"kRestore"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    NSLog(@"ok resign active");
}

答案 1 :(得分:1)

尝试将applicationWilLResignActive:方法更改为:

NSNumber *num = [NSNumber numberWithInt:viewController.myNum];

[[NSUserDefaults standardUserDefaults] setObject:num forKey:@"kRestore"];
[[NSUserDefaults standardUserDefaults] synchronize];

此外,您无法将NSNumber实例强制转换为int。在您的应用程序中:didFinishLaunchWithOptions:方法,将(int)testValue更改为[testValue intValue]。

答案 2 :(得分:1)

-registerDefaults中拨打applicationWillResignActive毫无意义。请参阅我的回答,了解registerDefaults的工作原理:How to register user defaults using NSUserDefaults without overwriting existing values?

您可以使用它来设置默认值。要保存非默认值但用户首选项,请使用提供的各种-set..方法。