写在-applicationWillTerminate中的NSUserDefaults:不生效; 为什么?

Bob*_*j-C 4 xcode objective-c nsuserdefaults ios

我已将下面的代码放在AppDelegate中,但是当我再次启动应用程序时,我注意到值仍然保存(Not NULL).这是为什么?

代码:

    - (void)applicationWillTerminate:(UIApplication *)application
{       [[NSUserDefaults standardUserDefaults]
         setObject:NULL forKey:@"roomCat"];
        [[NSUserDefaults standardUserDefaults]
         setObject:NULL forKey:@"TFA"];
        [[NSUserDefaults standardUserDefaults]
        setObject:NULL forKey:@"comments"];

}
Run Code Online (Sandbox Code Playgroud)

谢谢.

Lil*_*ard 9

你应该使用-removeObjectForKey:而不是设置NULL.前者是消除价值的官方方式,而后者是无证行为.

在任何情况下,如果使用-removeObjectForKey:不起作用,那么您可以添加一个调用

[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)

在末尾.但只有在没有它的情况下才能发挥作用.原因是因为呼叫-synchronize是(相对)昂贵的,所以只有在需要确保正确时才应该这样做.


再看看之后,我怀疑你真正的问题是这个方法根本没有被调用.在iOS 4及更高版本中,当应用程序进入后台时,它们不会调用此方法,而是调用它们-applicationDidEnterBackground:.您应该尝试将此代码放在那里.

  • @ Bobj-C:看我编辑的答案.可能根本没有被召唤.顺便提一下,为什么在您的应用退出时删除用户默认值?"NSUserDefaults"的重点是在应用程序启动时保持设置. (2认同)