我已将下面的代码放入我的 AppDelegate 中,但是当我再次启动应用程序时,我注意到值仍然保存(非 NULL)。这是为什么?
代码:
- (void)applicationWillTerminate:(UIApplication *)application
{ [[NSUserDefaults standardUserDefaults]
setObject:NULL forKey:@"roomCat"];
[[NSUserDefaults standardUserDefaults]
setObject:NULL forKey:@"TFA"];
[[NSUserDefaults standardUserDefaults]
setObject:NULL forKey:@"comments"];
}
谢谢。
最佳答案
您应该使用 -removeObjectForKey:
而不是设置 NULL
。前者是删除值的官方方式,而后者是未记录的行为。
在任何情况下,如果使用 -removeObjectForKey:
不起作用,那么您可以添加一个调用
[[NSUserDefaults standardUserDefaults] synchronize];
最后。但只有在没有它不起作用的情况下才这样做。原因是因为调用 -synchronize
是(相对)昂贵的,所以只有在需要确保正确性时才应该这样做。
再看一眼,我怀疑您的真正问题是根本没有调用此方法。在 iOS 4 及更高版本上,当应用程序进入后台时,它们不会调用此方法,而是调用 -applicationDidEnterBackground:
。您应该尝试将此代码放在那里。
关于objective-c - NSUserDefaults 写在 -applicationWillTerminate : do not take effect; Why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8901020/