保存managedObjectContext时如何处理错误?

时间:2011-03-05 02:51:25

标签: iphone ipad ios core-data

如果在执行 - [NSManagedObjectContext save:]时出现错误,还原到现有持久存储的适当策略是什么?

- [NSManagedObjectContext rollback]?

或者我应该在尝试保存之前在文件系统上保存商店的副本:然后,如果出现错误,请使用 - [NSPersistentStoreCoordinator setURL:forPersistentStore:]将商店设置为已保存的商店?

感谢您的任何指示。

的Gonzalo

3 个答案:

答案 0 :(得分:10)

当保存失败时(作为程序员)做错了。

我写了一些非常复杂的核心数据应用程序,从未在生产中看到过失败的保存。

确保用户可以输入的值可以保存而不会出错。

这意味着如果您具有非可选关系,则在用户为此关系选择实体之前,不接受“完成”按钮。或者设置默认关系实体 如果您需要特殊格式的NSString,请在接受之前验证该字符串。

对用户来说也更方便。如果你告诉他10 minutes ago you did something wrong, thats why I will delete all your changes他会想WTF?。如果你告诉他The value you try to enter is not in the correct format. Please use xxxxx他会认为Ok, let's change it.

现在确定保存永不失败后,您可以将[context rollback]放入其中,因为您永远不应该说永远不会。 但在此之前,您应该询问用户是否要向您发送错误日志。因为保存永远不会失败。

答案 1 :(得分:0)

我相信,虽然我没有在文档中看到它明确写入,但如果在保存期间发生错误,则保存失败并且数据存储将保持不变。您可以通过复制数据存储,强制某种错误,然后将存储与副本进行比较来轻松验证这一点。

答案 2 :(得分:0)

NSManagedContext save返回BOOL,如果成功则返回YES,否则返回NO。这将告诉您确定数据存储是否实际已被更改。

另一件事: 在“配置SQLite存储的保存行为”下查看Apple的“核心数据编程指南:持久存储功能”。它们提供了如何为存储设置完整同步选项的完整示例,以确保在保存过程中由于某些中断而导致数据损坏。