【问题标题】:iOS: Documents directory being 'cleaned'iOS:正在“清理”文档目录
【发布时间】:2016-05-20 04:49:56
【问题描述】:

情况

我有一个将核心数据数据库存储在文档目录中的应用程序。它似乎在大多数情况下运行良好,除了少数用户(数量非常多)抱怨他们的数据只是“消失”了。

这是一个仔细/良好编码的应用程序,没有来自 Core Data 的奇怪错误或崩溃。

我的怀疑

当存储空间不足时,iOS 有时会在应用图标下方显示“正在清理”字样。这会清理一些目录以释放空间。

救命!

这可能是原因吗?如果是这样,我该如何阻止这种情况?任何可以对此有所了解的人都将不胜感激。

【问题讨论】:

  • iOS 会进行清理,但这只是 Temp 或 Cache 目录,而不是 docs 目录。它从不触及这一点。数据消失的用户很可能在做一些奇怪的事情。也许他们正在删除并重新安装该应用程序。也许他们正在输入奇怪的非 ascii 内容等。除非他们准确地告诉您重现此错误的步骤,否则可能无法调试。
  • 我同意山姆的观点。文档应该用于用户拥有的数据,并且永远不应该被系统清除。缓存和临时目录被清除以清除空间。发布创建核心数据数据库的代码。还要获取到后备存储的路径并记录它。还要记录到您的文档目录的路径,并确保您保存到沙盒文档目录中。
  • 如果适合您的应用,您还应该考虑在 iCloud 中实现 Core Data:developer.apple.com/library/ios/documentation/General/…
  • @DuncanC 是的,谢谢。我打算将 Core Data NSError 日志发送到分析服务器以获取更多信息,也许这会带来更多信息。

标签: ios iphone swift core-data


【解决方案1】:

文档目录是存储核心数据数据库的推荐位置,iOS 永远不会“清理”存储在那里的任何内容。

用户可以手动删除 Documents 目录中的文件,方法是卸载应用程序或(如果您已在 info.plist 中启用它)从 iTunes 中浏览他们的手机。

大多数用户不希望他们的数据在卸载应用程序时被销毁(例如,Mac 和 PC 会保留数据),所以这可能就是正在发生的事情。

您应该考虑在您的服务器或用户的 iCloud 帐户上存储数据的第二份副本。这样它就不会被卸载破坏。如果是您的服务器,那么您可以证明为此功能收费是合理的(经常性收入是好的,对吧?)。

iTunes 和 iCloud 的备份都将包含您的数据库,因此您可以指示用户恢复到最近的备份以取回他们的数据。

还要仔细检查您的代码,看看它在尝试将更改保存到数据库时如何处理磁盘空间不足错误。根据您使用 Core Data 的方式,这可能会变得很糟糕。

如今,iCloud 或其他一些云解决方案中的 Core Data 是最好的方法。

【讨论】:

  • 谢谢,我确实实现了 iCloud,但第一次同步需要 20 秒左右 - 他们很可能不会等这么久。谢谢你。
猜你喜欢
  • 2011-12-22
  • 2019-07-11
  • 1970-01-01
  • 2015-10-20
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
相关资源
最近更新 更多