是这样吗?当您提交应用程序更新到App Store时,NSUserDefaults会被重置,还是它们会重置?
我的应用程序更新后崩溃了,但在完全下载时没有崩溃-因此我正在尝试确定更新会话中可能与全新下载的会话有何不同。
谢谢, Nick。
是这样吗?当您提交应用程序更新到App Store时,NSUserDefaults会被重置,还是它们会重置?
我的应用程序更新后崩溃了,但在完全下载时没有崩溃-因此我正在尝试确定更新会话中可能与全新下载的会话有何不同。
谢谢, Nick。
通常情况下,除非用户删除了应用程序,否则它们不会被重置。对于基本数据,NSUserDefaults是保存首选项、日期、字符串等数据的最佳方式。如果您要保存图像和文件,则文件系统是更好的选择。
我相信答案是肯定的,它将持久存在。这也在苹果iPhone OS编程指南的"应用程序目录"章节中得到充分记录。
注意这种情况,当您的应用程序在后台运行时,无法访问存储在NSUserDefaults中的值:
Eric:
关于这个问题已经有很多线程和错误报告了,但是在iOS 9中我又遇到了这个问题。我的应用程序会在后台响应NSURLSession任务和content-available推送而启动。如果我重新启动手机并等待应用程序在后台启动,然后打开应用程序,我发现[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]包含所有系统值,例如AppleITunesStoreItemKinds等,但不包含我设置的任何值。如果我强制退出并重新启动应用程序,则所有我的值都会恢复。是否有任何方法可以避免缓存“空”standardUserDefaults,至少可以确定何时它们被破坏并在不必强制退出应用程序的情况下进行修复?
Eskimo (eskimo1@apple.com):
问题在于NSUserDefaults最终由应用程序容器中的文件支持,而您的应用程序容器受到数据保护的限制。如果您没有采取任何特殊措施,则在iOS 7及更高版本上,您的容器将使用NSFileProtectionCompleteUntilFirstUserAuthentication,这是一个由NSUserDefaults后备存储继承的值,因此您无法在第一次解锁之前访问它。