我遇到了这样的问题:在userDefaults中保存数据的语法很明确,并且每天都在app中工作。今天我遇到了一个问题,即同步后没有任何内容存储。 P.S我没有语法错误。
这是一个保存和阅读的例子:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"StackOverflow"];
[[NSUserDefaults standardUserDefaults] synchronize];
阅读
BOOL stackOverflow = [[NSUserDefaults standardUserDefaults] boolForKey:@"StackOverflow"];
我知道有关mutableCopy的信息,但在这种简单的情况下,它不需要。
对于userDefaults有任何限制吗?我正在测试真实设备和存储,我有免费的50GB。我知道userDefaults存储在plist文件中,在危急情况下可能是1MB但我甚至不超过1kb :( ...
using latest xcode and latest iOS version on 6S.
需要建议。谢谢你的帮助。
答案 0 :(得分:2)
所以经过半小时的早上工作后,我找到了解决方案,实际上是问题所在。像我这样的案例,90%是开发人员的错,所以就是这样。
我有超过30个用户默认值,其中例如其中15个有initWithSuitName
(标识符),使用标识符ID保存的所有内容都运行良好但没有保存值由于优先权冲突而破裂。
Solution:
我用标识符替换了未命名的userDefaults,一切都已修复。
如果出现NSUserDefaults的某些问题:
NSUserDefaults - 是线程安全的。
同步 - 立即保存数据
保存数据 - 如果应用程序将终止丢失数据的几率为50%,则调试停止按钮后点击是相同的情况。如果没有在正确的地方保存,P.S数据丢失将是50%。
分发NSUserDefaults - 在调试器中,您只需选中po [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]
和po [[NSUserDefaults standardUserDefaults] valueForKey:@"KeyForSavedData"]
共享容器示例 - 如果您想在应用和扩展程序之间共享媒体资源,只需在appGroup
initWithSuitName:@"com.Example.ExampleAPP"
标识符即可
答案 1 :(得分:0)
我之前遇到过这个问题。我只是删除密钥后再将其添加到新对象。 实施例
[NSUSER removeObjectForKey:@"savedData"];
[NSUSER setBool:YES forKey:@"savedData"];
[NSUSER synchronize];
注意: 如果你使用了很多NSUSER那么它就像嘲笑一样。这是我的一点经验。