gpt4 book ai didi

ios - 偶尔的 NSUserDefaults 麻烦

转载 作者:可可西里 更新时间:2023-11-01 06:24:31 30 4
gpt4 key购买 nike

我使用 NSUserDefaults 在用户的 iOS 设备上保留大约 100 个键/值对。每对只是一个字符串键和 bool 值。这几乎一直都很好用。最近,一些用户提到他们的应用程序被“重置”。具体来说,他们的应用没有从 NSUserDefaults 中正确读取数据。我试图了解这是怎么发生的。

一些注意事项:

  • 我在每次更新用户默认设置后调用同步
  • 我没有任何代码可以清除单个条目或整个默认值
  • 默认值在 application:didFinishLaunchingWithOptions: 中读取
  • 当应用从后台移动到前台时,不会读取默认值

我发现了一些有趣的评论 in this Loom.com blog post .当应用程序在后台重新启动时,听起来像 NSUserDefaults 后备 plist 可能无法访问。我不确定如果后台应用程序在后台崩溃时是否会重新启动。但是,我很好奇,因为根据我的崩溃报告服务,我的应用确实在后台崩溃了。此外,此崩溃在收到内存警告后立即发生。

应用程序在崩溃后(在后台时)在后台重新启动时是否可能无法读取用户默认值?

非常感谢有关如何诊断此问题的任何建议!

编辑 - 更多信息:听起来 CoreLocation 框架可能会导致应用程序在后台崩溃后在后台重新启动。我的应用程序包含一些第 3 方广告和分析 SDK。事实上,这个问题是在添加了一个可以使用 CoreLocation 的特定 SDK 之后开始出现的。

最佳答案

iOS 做了一些复杂的事情来(几乎)无缝地加密写入磁盘的数据,所以这种错误是绝对可能的。也许由于某种原因文件无法解密,而是被删除,恢复 NSUserDefaults .

我不知道这是原因,但在我看来很有可能。

另外,注意 NSUserDefaults将数据保存到 <Application_Home>/Library这不是一个安全的地方。它适用于“您的应用程序下载或生成并可根据需要重新创建的文件”。

也许存储数据的更好位置是 <Application_Home>/Documents ,这是针对“您的应用程序无法重新创建”的数据。如果您的用户默认值非常重要以至于这会成为一个问题,那么它将归类为“用户生成的内容”,因此应该存储在 Documents 文件夹中。

所以,我建议删除 NSUserDefaults因为它不符合你的需求,所以通过写一个NSDictionary来保存数据到 Documents 文件夹,使用 NSCoding 或 Binary Plist(确保将其设置为 NSPropertyListBinaryFormat_v1_0 ,因为这不是默认设置,应该像 iOS 设备一样在慢速闪存上使用)。

Apple 有很好的 NSCoding 和 Plist 序列化文档和示例代码:

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Archiving/Articles/creating.html#//apple_ref/doc/uid/20000949-BABGBHCA

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/PropertyLists/SerializePlist/SerializePlist.html#//apple_ref/doc/uid/10000048i-CH7-SW1

您还可以使用核心数据,这是我在我的应用程序或 SQLite 中使用的数据。但是,如果您只存储“数百个”设置,我不会选择这些选项中的任何一个。如果数据不适合 RAM,它们通常是一个不错的选择。对于适合内存的数据,NSCoding 和 Plist 的处理速度要快得多,也更容易处理。

同时阅读“您应该将应用程序的文件放在哪里”:https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html

关于ios - 偶尔的 NSUserDefaults 麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25163573/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com