iOS:随时修改托管对象模型,更新模型中的字段

时间:2014-09-13 03:25:41

标签: ios core-data

我的模型上有“上次更新”字段。每当托管对象模型发生变化时,我都希望该字段得到更新。有什么方法可以自动发生这种情况吗?或者,当我进行其他修改时,是否需要手动更新该字段?

2 个答案:

答案 0 :(得分:0)

“我有什么方法可以自动发生这种情况吗?”

没有。核心数据不是数据库,它是抽象对象图管理的API。它没有唯一性概念,自动递增值等等。

“或者,当我进行其他修改时,是否需要手动更新该字段?”

更正,例如,应用程序为每次更改设置lastModified属性。

答案 1 :(得分:-1)

您可以KVO实体中的所有密钥,但这可能不是必需的。我建议您只在实际保存对象时更新lastUpdated属性,因为在此之前您仍然可以丢弃更改(无论是故意还是因为应用程序终止)。

因此,您只需覆盖willSave即可。这是专门为这种情况设计的(它提到了一个"最后修改过的"属性),但请注意文档中提到的警告

  

如果要更新持久属性值,通常应在进行更改之前测试任何新值与现有值的相等性。如果使用标准访问器方法更改属性值,Core Data将观察生成的更改通知,因此在保存对象的托管对象上下文之前再次调用willSave。如果您继续修改willSave中的值,则会继续调用willSave,直到您的程序崩溃。

     

例如,如果设置了上次修改的时间戳,则应检查先前是否在同一个保存操作中设置了它,或者现有时间戳是否不小于当前时间的小增量。通常,最好为所有正在保存的对象计算一次时间戳(例如,响应NSManagedObjectContextWillSaveNotification)。