NSUserDefaults 不保存数据。限制?
Posted
技术标签:
【中文标题】NSUserDefaults 不保存数据。限制?【英文标题】:NSUserDefaults Not Saving Data. Limits? 【发布时间】:2015-12-21 17:20:28 【问题描述】:我有这样一个问题:在 userDefaults 中保存数据的语法很清楚,并且每天都在 app.xml 中工作。今天我有这样一个问题,同步后什么都没有存储。 P.S 我没有语法错误。
这里是一个保存和读取的例子:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"***"];
[[NSUserDefaults standardUserDefaults] synchronize];
阅读
BOOL *** = [[NSUserDefaults standardUserDefaults] boolForKey:@"***"];
我知道有关 mutableCopy 的信息,但在这种简单的情况下不需要它。
那么 userDefaults 有什么限制吗?我正在真实设备和存储上进行测试,我有高达 50GB 的免费空间。我知道 userDefaults 存储在 plist 文件中,在危急情况下可能是 1MB,但我什至不超过 1kb :( ...
using latest xcode and latest ios version on 6S.
需要建议。感谢您的帮助。
【问题讨论】:
您是否调试并检查了默认保存的内容?你如何测试这个(时间很重要)。 调试器中的值是正确的(我正在使用 po [[NSUserDefaults standardUserDefaults] valueForKey:@"***"] 和 po [[NSUserDefaults standardUserDefaults] dictionaryRepresentation] 进行测试)值是正确的。我已经阅读了有关终止应用程序的信息(虽然终止时不保存数据的可能性很小),但我尝试了所有方法。 读写是在同一个线程上进行还是不同? 【参考方案1】:因此,经过半小时的早上工作,我找到了解决方案,实际上是问题所在。像我这样的案例 90% 都是开发人员的错,确实如此。
我有超过 30 个用户默认值,例如其中 15 个有 initWithSuitName
(标识符),使用标识符 id 保存的所有内容都运行良好,但由于首选项冲突,没有它的保存值被破坏。
Solution:
我用标识符替换了未命名的 userDefaults,一切都已修复。
如果 NSUserDefaults 出现问题:
NSUserDefaults - 是线程安全的。
同步 - 立即保存数据
保存数据 - 如果应用程序将终止丢失数据的可能性为 50%,则在调试停止按钮后点击是相同的情况。 P.S 如果没有保存在正确的位置,数据会丢失 50%。
调试 NSUserDefaults - 在调试器中,您可以简单地提示 po [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]
和 po [[NSUserDefaults standardUserDefaults] valueForKey:@"KeyForSavedData"]
共享容器示例 - 如果您想在应用程序和扩展程序之间共享属性,您只需在 initWithSuitName:@"com.Example.ExampleAPP"
中输入 appGroup
标识符
【讨论】:
【参考方案2】:我以前遇到过这个问题。我只是在将密钥添加到新对象之前删除它。 示例
[NSUSER removeObjectForKey:@"savedData"];
[NSUSER setBool:YES forKey:@"savedData"];
[NSUSER synchronize];
注意: 如果你使用了这么多的 NSUSER,那么它就像是在嘲笑。这是我的一点经验。
【讨论】:
我在这个项目中使用了超过 10 个提示的不同数据,一切都坏了。这是设备的问题吗?我删除了应用重置的隐私和内容,但错误仍然存在 设备没有问题。有时 nsuser 不会被 xcode 读取。根据我的经验,当我经常使用 20 到 30 nsuser 时,这种情况非常罕见。但是请记住,如果您不使用该nsuser,请尽快将其删除。以上是关于NSUserDefaults 不保存数据。限制?的主要内容,如果未能解决你的问题,请参考以下文章
NSUserDefaults 并不总是保存我的 NSString 数据