2010-11-19 54 views
3

我将一个整数值传递给NSUserDefault对象以供我的应用程序加载时使用。我HAD它工作完美,直到我试图将该整数值切换到浮动。它引起了一大堆问题,所以我重新调整了我的方法,并命令我回到整数的安全方式......所以我想。是否NSUserDefault需要几秒钟来注册我通过它的值?

它曾经是,如果我保存的价值,我可以立即关闭我的模拟器,并控制台会吐出正确保存的号码没有问题。现在,在愚蠢的浮动混乱之后(我可能损坏了我的NSUserDefault对象吗?这听起来很愚蠢......),获得正确的数字显示有点冒险。

我已经经历了一堆NSLogs,并可以确认当我点击保存时,我保存的值正确传递给UserDefault类中的set方法。 set方法正确获取值,然后将其设置为NSUD对象,像这样:

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

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

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

为什么时间与这个操作有关?我只是完全丧失了为什么会发生这种情况,尤其是因为我昨天刚刚正常工作...

任何想法或输入将不胜感激!

回答

9

您是否确定-synchronize NSUserDefaults?

+0

我不太熟悉,我该如何同步? – Jerry 2010-11-19 23:24:52

+0

良好的通话 - 但我认为只有控制它写出闪光。 (根据文档)它保留了“内存缓存” - 即使在写入闪存之前,它也能在回读时保持一致。 – Brad 2010-11-19 23:27:04

+0

@Jerry Do [nsudobjectnamehere同步]。 – 2010-11-19 23:32:28

1

我从来没有注意到这种行为 - 而且我不认为这是涉及延迟的情况。

所以最明显的问题是:

如果你做一个:

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

你得到正确的值?

+0

是的,把上面的NSLog与我的一些其他人产生相同的价值。如果是在我关闭应用程序之前,它是正确的,如果是在装载它时,它会产生错误的号码......太奇怪了! – Jerry 2010-11-19 23:24:34

0

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

另请参阅Apple讨论论坛上关于non-sticky NSUserDefaults issue的此主题。

+0

那么只需在模拟器中进入Settings应用程序,就像使用齿轮的应用程序一样?打开然后关闭?我试过了,并没有帮助...当我回到家时,我会把它扔到我的设备上,看看是否有帮助。我希望这只是一个模拟器的bug ...谢谢 – Jerry 2010-11-19 23:27:30

+0

我知道我遇到了这个相同的模拟器问题,并且跳舞似乎为我解决了这个问题。 :\抱歉! – 2010-11-19 23:29:54

相关问题