微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

objective-c – 用-applicationWillTerminate编写的NSUserDefaults:不生效;为什么?

我已将下面的代码放在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"];

}

谢谢.

解决方法

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

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

[[NSUserDefaults standardUserDefaults] synchronize];

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐