上下文保存失败后未保存的 NSManagedObject 生命周期

Posted

技术标签:

【中文标题】上下文保存失败后未保存的 NSManagedObject 生命周期【英文标题】:Unsaved NSManagedObject life cycle after context save failure 【发布时间】:2014-08-06 09:26:28 【问题描述】:

假设由于与数据本身无关的原因,我无法保存 NSManagedObjectContext。一个典型的例子是设备上没有足够的空间。

据我了解,NSManagedObjects 仍驻留在内存中,处于未保存状态。

以下是以下问题:

    对象会发生什么?他们是否有突然被逐出记忆的风险,特别是当应用程序处于后台时?如果是,发生这种情况时是否有某种通知? 您如何管理此类事件或类似事件,而不是由程序本身引起的? 是否可以在 XCode 开发过程中模拟这种特殊行为(空间不足)?

【问题讨论】:

【参考方案1】:

对象会发生什么?他们是否有突然被逐出记忆的风险,尤其是当应用程序处于后台时?如果是,发生这种情况时是否有某种通知?

对象不会从内存中被逐出。 应用程序如果在后台,则可以从内存中逐出。发生这种情况时,应用程序的所有对象也会消失。通知将遵循与普通应用生命周期通知相同的规则——那些由UIApplication 发布并作为回调发送给应用委托的规则。

您如何管理此类或类似的非程序本身的事件?

您无能为力。如果设备上没有空间,则无法保存数据。唯一真正的选择是,如果您有一些可以删除的其他已保存数据,以腾出一些空间。如果这不是一个选项,那么您就不走运了,因为没有地方可以放置这些未保存的数据。

在 XCode 开发过程中是否可以模仿这种特殊行为(空间不足)?

拿一个测试设备并用数据填充它,然后运行您的应用程序。

【讨论】:

以上是关于上下文保存失败后未保存的 NSManagedObject 生命周期的主要内容,如果未能解决你的问题,请参考以下文章

IOS13:选择保存照片后未调用 UIActivityViewController.completionWithItemsHandler

为啥在关闭/打开应用程序后未保存的修改后的 NSManagedObject 在 isUpdated 上返回 FALSE?

在 stringWithContentsOfURL cookie 后未保存在 UIWebView 中。 iOS

Magical Records:加载要在本地上下文中更新的记录

使用 setPropertiesToFetch 时将数据保存在 NSManagedObjects

NSManagedObject 保存在核心数据中但属性错误