- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我使用 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 序列化文档和示例代码:
您还可以使用核心数据,这是我在我的应用程序或 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/
我有 4 个 TextView。它们一开始都是不可见的,我将它们动画到屏幕上(从底部滑入)。我启动一个线程来为每个动画制作动画,每个动画开始时间间隔 200 毫秒。问题是:开始 Activity 后第
我有一个奇怪的问题,我似乎无法解决。 :(我有一个基于 Web 的应用程序,可以发送电子邮件。它通过连接在本地网络上设置的基于 Windows 的 SMTP 服务器来实现。此 SMTP 服务器不需要我
从昨天开始,我一直遇到一些设备收不到推送通知的问题。证书/设备 token 似乎是正确的,因为直到昨天,该设备还可以成功接收推送通知。 在服务器端,没有错误或连接拒绝,而且推送通知似乎每次都发送成功。
我有一个将 Angular 错误记录到数据库的应用程序,并且我偶尔会看到此错误的日志 Error: [$compile:tpload] http://errors.angularjs.org/1.5.
我收到一个 ImportError from azure.storage.blob import BlobServiceClient 但是我意识到当我安装依赖项时会发生错误 pip install a
我已经完成了使用AVAudioPlayer实现的简单音频播放GUI。 播放声音时,我使用UISlider提供播放反馈... 这是奇怪的地方。 我有一个非常偶尔发生的问题-而且大多数情况都不会发生,因此
在我的 XNA 游戏中,我的计算机(2.5 Ghz 双核 Intel Centrino 2)在 Debug模式下有一个大约需要 10 毫秒的操作。它只会每隔几分钟运行一次,它基本上只是整数数学/按位运
我相信我的应用程序编码正确(至少大部分是这样),因为它在大约 98% 的时间里都能正常工作。但是,大约 2% 的时间,我得到的似乎是有效的身份验证 token ,但是当我去发布照片时,我收到以下错误“
我在 apple store 上有一个应用程序,在 iOS6 更新后,我在 MKMapView 中收到了数百份崩溃报告。我无法在我的设备上重现崩溃。它看起来像是 EAGLContext 的问题。我们不
我最近开始使用 Foundation 5(我第一次使用 Foundation),我遇到了一个问题,似乎任何元素都响应了 .click 事件(例如顶部导航栏,单击元素时显示的数据下拉列表)将随机不起作用
花了大约一整天的时间试图解决这个问题,希望有人能帮助我!我是新来的,所以如果这是一个重复的问题,我深表歉意(我做了我的研究,但无法提前找到任何东西)。 我正在为我的咨询公司构建的网站使用浏览器缓存,但
我有一个表格,使用了以下 CSS 和 HTML: .price { position:relative; display:block; text-align:center; }
我们使用 ansible 将多个节点配置为一个集群。这些机器是在自定义 AWS 类似基础设施上创建的实例。 我们在不同的剧本上有大约一百个任务,它们在每个节点上执行。 问题是,我们收到零星的主机无法访
我们偶尔会从用户那里收到崩溃报告(我们使用崩溃报告程序包将崩溃发送到我们的服务器),并出现以下错误: “非法尝试在不同上下文中的对象之间建立关系‘...’” (不同的报表可能有不同的关系,并非所有报表
我是一名优秀的程序员,十分优秀!