我创建了一个简单的项目,使用“+”和“ - ”按钮增加或减少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");
}
由于
答案 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..
方法。