为啥核心数据不会持久化到磁盘?
Posted
技术标签:
【中文标题】为啥核心数据不会持久化到磁盘?【英文标题】:Why would core data not persist to disk?为什么核心数据不会持久化到磁盘? 【发布时间】:2015-01-05 12:00:03 【问题描述】:我有一个应用程序,它使用核心数据并在数据更改时定期成功写入磁盘。对于大多数用户来说,这绝对没问题。
然而,一个人发现他们可以使用该应用几个小时,并且只有在关闭该应用并再次打开它时,才发现没有保存任何内容。
没有错误,没有崩溃。该应用程序继续完全可用。它只是没有将任何内容保存到磁盘。
当他们继续使用该应用程序时,同样的事情发生了,它不会将任何内容保存到磁盘。当那个人重新启动他们的手机时,这个问题实际上已经解决了(没有更改代码)。
我想知道这是否可能是磁盘空间问题?该应用在他们的手机上大约有 170mb,而且他们有大约 300mb 的可用空间。
我愿意接受任何建议。就我个人而言,我宁愿让应用程序崩溃,也不愿让某人继续使用它几个小时,而他们没有意识到没有任何东西保存到磁盘上。
我正在使用 Magical Record 来实现我的核心数据。
我使用的是MR_saveToPersistentStoreAndWait
,现在我切换到了MR_saveToPersistentStoreAndWaitWithError
。但我什至不知道要检查什么,因为我不知道它是否会引发错误。
【问题讨论】:
是否可以为用户提供启用了额外日志记录的构建?自第一次以来问题是否再次出现? 据我所知,这种情况再也没有发生过。我可能会为他们提供额外的日志记录。 重现性是关键,如果不重现问题,日志构建不会有太大帮助。 也可以指出您的代码存在错误。 谢谢,是的,复制它会很理想。在这一点上,我不知道该怎么做。我想我会尝试将它放在内存不足的设备上,看看如果它没有足够的空间来保存它会做什么。但实际上我正在寻找任何其他的想法从哪里开始。 【参考方案1】:虽然我不能确定我是否在报告问题的用户设备上重现了该问题。我能够重现我的应用程序将继续运行但不会将任何内容保存到磁盘的场景。
我通过手动创建一个不符合实体模型验证规则的对象来做到这一点。
当试图保存上下文时,它吐出了一个错误,但应用程序继续运行,就好像没有问题一样。
【讨论】:
以上是关于为啥核心数据不会持久化到磁盘?的主要内容,如果未能解决你的问题,请参考以下文章
具有 MEMORY 存储引擎的 MySQL 数据库是不是持久化到磁盘?