3

我将一个整数值传递给 NSUserDefault 对象以在我的应用程序加载时存储以供使用。在我尝试将该整数值切换为浮点数之前,我让它工作得很好它引起了一大堆问题,所以我重新调整了我的方法,并且命令-z'd让我回到整数的安全性......或者我是这么想的。

以前如果我保存了这个值,我可以立即关闭我的模拟器,控制台会毫无问题地吐出正确保存的数字。现在,在那次愚蠢的浮动混乱之后(我可以破坏我的 NSUserDefault 对象吗?这听起来很愚蠢......),获得正确的数字来显示有点像是一场赌博。

我已经处理了一堆 NSLog,并且可以确认我点击保存时保存的值正确地传递给了 UserDefault 类中的 set 方法。set 方法正确获取值,然后将其设置为 NSUD 对象,如下所示:

[self setObject:[NSNumber numberWithInteger:num] forKey:savedNum];

当我在该对象上运行 get 方法时,控制台会正确打印出该值。当应用程序加载时,它会调用我刚刚测试的 SAME get 方法,但它并不总是返回正确的东西。很多时候,它会显示之前保存的值。

如果我点击保存按钮并在关闭应用程序之前等待 5 秒钟,它以前可以正常工作,但很少见。如果我等待 10 秒,它会吐出正确的数字。

为什么时间与这个操作有任何关系?我完全不知道为什么会发生这种情况,特别是因为我昨天才让它正常工作......

任何想法或意见将不胜感激!

4

3 回答 3

9

你确定-synchronizeNSUserDefaults 了吗?

于 2010-11-19T23:13:22.467 回答
1

我从来没有注意到这种行为——而且我认为这并不涉及延迟。

所以最明显的问题是:

如果您执行以下操作:

[[NSUserDefaults standardUserDefaults] setInteger:value ForKey:@"myInteger"];
NSLog(@"It is %d",[[NSUserDefaults standardUserDefaults] integerForKey:@"myInteger"]);

你得到正确的值吗?

于 2010-11-19T23:17:35.940 回答
0

我相信这是一个模拟器错误。在模拟设备上使用您的应用程序,打开 Settings.app。现在退出 Settings.app。您的默认设置将突然开始工作。

另请参阅 Apple 论坛上有关非粘性NSUserDefaults问题的此线程。

于 2010-11-19T23:21:49.600 回答