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 数据

NSUserDefaults 自动加载和保存数据

如何从 NSUserDefaults 中检索数据?

NSUserDefaults 不保存

iOS NSDictionary 保存到 NSUserDefaults 不保存值

何时(不)滥用 NSUserDefaults