【发布时间】:2015-11-13 12:29:50
【问题描述】:
我将用户的用户个人资料图片 ID 保存为 NSUserDefaults 中的字符串,例如@“12”。当我这样做时,我会立即调用同步方法。
当我从 NSUserDefaults 读取这个值时,它可能在 99% 的时间内返回 @"12"。但有时,它会返回一个不同的值(由于事件的稀有性,我无法找到它,但怀疑它是 nil 或某个默认值(?))。
我用来写/读的代码很简单:
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:@"12" forKey:@"photoID"];
[userDefaults synchronize];
NSString* photoID=[userDefaults objectForKey:@"photoID"];
我知道有时返回的值不正确,因为当时应用的行为就好像该值不同(即通知用户联系人,个人资料图片已更改)。
当这种情况发生时,对 objectForKey 的下一次调用会返回正确的值,因此用户联系人会收到另一个通知,即个人资料图片再次更改。
【问题讨论】:
-
我只需要在更改默认值时调用同步,这种情况并不常见,所以不用担心。我怀疑删除它会改变任何事情,问题是需要几天时间才能确定错误是否再次出现。我希望听到遇到类似问题的人的来信,即 99% 以上的时间都可以正常工作,但有时却不行。
-
并非所有错误都可以轻松重现。如果我知道行为或情况,我可能能够修复错误。我正在寻找的是经历过这个问题的人。我愿意尝试,但我很确定调用 synchronize 不会导致错误。
-
我猜你是对的......很公平。
-
我有一种感觉,错误不在您显示的代码中,而是在其他地方,如果您将该代码放在 for 循环中一百万次,它会给您 100% 的正确结果当时我相当确定。像这样的行为通常是线程没有正确互斥锁的结果
-
你在猜测返回的值不正确,你需要创建一个测试。发生错误情况时打印蓝色。
标签: ios nsuserdefaults