【问题标题】:Strange NSUserDefaults behavior奇怪的 NSUserDefaults 行为
【发布时间】:2010-11-08 00:13:41
【问题描述】:

当我的 iPhone 应用程序运行时,我将一些数据 (NSStrings) 存储在 NSUserDefaults 中。我正在存储游戏的高分,仅供参考。当我双击主页按钮并终止应用程序时,当我重新启动应用程序时,我存储在 NSUserDefaults 中的值通常不存在。 为什么会这样?

我使用的代码在所有预多任务操作系统(3.0 等)中运行良好。从阅读/搜索网络看来,这样做 [NSUserDefaults standardUserDefaults] synchronize]; 可能会有所帮助。有什么想法吗?

谢谢!

【问题讨论】:

    标签: iphone nsuserdefaults synchronize


    【解决方案1】:

    当应用程序暂停时从任务栏中杀死它只是向它发送 SIGKILL 消息;不会发生正常关闭。

    如果您正在后台处理然后终止应用程序,您可能不会在应用程序终止之前同步用户默认值(写入磁盘),这通常在内部计时器上自行发生,但如果您已写入默认值,然后事情在自动同步发生之前被挂起,这可以解释这种行为。

    把这个(如你所记):

     [[NSUserDefaults standardUserDefaults] synchronize];
    

    在应用程序委托中的 -applicationDidEnterBackground 处理程序中。这样,即使应用程序在后台死机或被杀死,您也知道已写入默认值。

    作为一种防御性实践,我通常在每次编写我认为非常重要的状态时显式调用默认对象上的同步。

    【讨论】:

    • 太棒了!感谢您的回复。在 applicationDidEnterBackground 中调用同步有效。
    【解决方案2】:

    你在哪里调用 -synchronize 方法?您是否注意操作系统发送的应用委托消息,让您知道您的应用即将关闭?

    【讨论】:

    • 我根本没有调用 -synchronize 方法 :-(
    【解决方案3】:

    我不确定是不是这个,但你给[[NSUserDefaults standardUserDefaults] registerUserDefaults:...]打过电话吗?

    【讨论】:

    • 应用启动时我调用了 registerUserDefaults 一次。
    猜你喜欢
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2015-07-20
    • 2010-10-03
    相关资源
    最近更新 更多