iOS中的NSUserDefaults随机消失并重新出现

时间:2017-04-08 16:05:27

标签: ios local-storage nsuserdefaults

只是想知道是否有人遇到过这个问题?

我目前正在使用Objective-C在iOS中开发应用程序。 有时,在编译应用程序后,NSUserDefaults中的数据将会丢失。

但如果我忽略它并再次重新编译应用程序,数据会突然重新出现。

我已经在几个地方同步(不是在每个键中,而是在几个地方)。

如果有人碰巧遇到此问题,我希望您能分享如何处理此问题。

P.S。我需要一个存储空间来保存1个特定对象,以便在应用程序重新打开时检索它。

编辑添加代码

NSString *enPIN = [[NSString alloc]initWithString:[NSString stringWithFormat:@"%@", [enterField.text md5]]];

[[NSUserDefaults standardUserDefaults] setObject:enPIN forKey:@"pin"];
[[NSUserDefaults standardUserDefaults]synchronize];

NSLog(@"check pin %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"pin"]);

该对象是一个字符串,我使用md5对其进行哈希处理,然后将其存储在nsuserdefault中,如果它只是随机消失可能并不奇怪,但如果我重新编译应用程序,它也会在消失之后再次重新编译

2 个答案:

答案 0 :(得分:0)

检查您的默认值是仅使用字符串值还是bool等。

如果您正在使用任何带有类(如键和参数)的Object(如NSObject)来存储默认值,我更喜欢在存储和检索值之前进行相应的编码和解码。

此外,如果您存储任何NSDictionary检查该字典中的任何对象值是否不是Bool,String之外的任何内容,如果还存储了任何NSObject类或引用,那么您可能会面临同样的问题。

关于如何在存储到NSUserDefaults之前对对象进行编码,请参阅此stackoverflow link

最后[defaults synchronize]在viewwilldisappear上强制调用,或者在存储新值后立即调用,无论你的实现方式如何。

希望这有帮助。

答案 1 :(得分:0)

前几天NSUserDefaults

我遇到了类似的问题

不太确定导致它的原因,但这是由于Xcode中的一个错误。我能够在不改变代码的情况下解决问题。我只是清理了项目(CMD-Shift-K)并重新启动了我的计算机,然后它运行得很好。值得一试

您是否在控制台中收到任何类型的错误消息?