插入的 NSManagedObject 无法保存时会发生啥情况?

Posted

技术标签:

【中文标题】插入的 NSManagedObject 无法保存时会发生啥情况?【英文标题】:What happens to an inserted NSManagedObject when it cannot be saved?插入的 NSManagedObject 无法保存时会发生什么情况? 【发布时间】:2014-03-05 18:53:14 【问题描述】:

有人知道当 save 返回错误时插入的 NSManagedObject 会发生什么(即缺少插入对象的必需属性)吗?插入的 NSManagedObject 仍然存在还是消失了?

我读到即使验证失败,插入的对象仍然会被保存,但很好奇它是否应用于失败的保存。 (Core Data saves object even when validation fails)。

【问题讨论】:

【参考方案1】:

如果保存失败,它将保留在内存中(只要上下文仍然存在),但不会写入磁盘。

鉴于可以在开发过程中测试、捕获和纠正 99.999% 的保存失败,因此没有理由编写生产代码来防范此事件。在开发过程中测试并解决所有保存错误,您无需担心这种情况。

仅供参考;超出您控制范围的 0.001% 几率与电源故障/磁盘故障有关。不是您可以防范的。

【讨论】:

嗯...有时采取不同的行动是有意义的,例如,如果您有一个 NSDate *lastUpdateDate(例如保存在 NSUserDefault 中),它代表您上次与 API 同步的时间,并且您使用API 请求在该日期之后对更改进行比较,您可能只想设置“lastUpdateDate”以防保存失败,以便始终允许您的更新成功保存。 这是一个开发者级别的事件。你把代码放在那里来处理它。我并不是说这一切都是魔法并且有效。我是说所有会导致-save: 失败的东西都可以在生产前进行测试并做出反应。 如果保存失败,我会抛出异常并崩溃。 @MarcusS.Zarra 是对的,保存永远不会失败。 磁盘已满似乎是您可以处理的错误示例(提示用户腾出空间然后重试)。 磁盘已满并不是真正适用于现代 ios 的东西,但也可以在保存之前轻松检测和避免。

以上是关于插入的 NSManagedObject 无法保存时会发生啥情况?的主要内容,如果未能解决你的问题,请参考以下文章

保存对 NSManagedObject 的更改

已插入但尚未保存的 NSManagedObject?

应更新数据时,NSManagedObject 的删除/插入与更新

核心数据:NSManagedObject 何时插入上下文并保存?

NSManagedObject 不插入它:相关的很多

将 NSManagedObject 重新插入到 ManagedObjectContext