简体   繁体   English

奇怪的iPhone SDK NSUserDefaults行为

[英]Strange iPhone SDK NSUserDefaults behaviour

I'm experiencing some strange NSUserDefaults behaviour. 我遇到一些奇怪的NSUserDefaults行为。 I save my data, then synchronize, then do a NSlog of the NSUserDefaults to make sure its saved. 我保存我的数据,然后进行同步,然后对NSUserDefaults进行NSlog以确保其已保存。 The data is shown as saved properly from the NSlog, but when I completely close the app (double click home button and kill the app) when it restarts the value has not changed. 数据显示为已从NSlog正确保存,但是当我完全关闭应用程序(双击主屏幕按钮并杀死该应用程序)时,该数据重新启动时值并未更改。 Whats even stranger is if I repeat the code several times by saving NSUserDefaults, killing the app, reloading the NSUserDefaults sometimes it gets saved properly and other times it does not. 甚至更奇怪的是,如果我通过保存NSUserDefaults,杀死应用程序,重新加载NSUserDefaults多次重复代码,有时会正确保存它,而有时却无法正确保存。

I read this post Strange NSUserDefaults behavior but I am calling synchronize so I don't think thats my problem. 我读了这篇文章Strange NSUserDefaults的行为,但我正在调用同步,所以我认为这不是我的问题。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:@"MyString" forKey:@"testString"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

Any help is greatly appreciated. 任何帮助是极大的赞赏。

What really confuses me is if the NSLog of standardUserDefaults shows the data is saved why wouldn't it be after the app has been killed??? 真正令我困惑的是,如果standardUserDefaults的NSLog显示数据已保存,为什么在应用程序被杀死后为什么不保存数据呢?

Thanks 谢谢


UPDATE 更新


Looks like the issue was with a mixup in mutable and immutable arrays i was saving to NSUserDefaults. 看起来问题出在我保存到NSUserDefaults的可变数组和不可变数组中。 I used mutablecopy when I was retrieving the data and seemed to solve the issue. 我在检索数据时使用了可变拷贝,似乎可以解决问题。

For getting the value you could use something like this 为了获得价值,您可以使用类似这样的东西

NSUserDEfaults *ud = [NSUserDefault standarUserDefaults];
[ud objectForKey=@"YourKey"];

If it returns nil it hasn't been saved. 如果返回nil,则尚未保存。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM