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

Posted

技术标签:

【中文标题】核心数据:NSManagedObject 何时插入上下文并保存?【英文标题】:Core Data: when is NSManagedObject inserted into a context and saved? 【发布时间】:2012-02-28 20:24:24 【问题描述】:

这是我的代码:

for (NSString *filePaths in self.filesAdded) 
        FileAttachments *fileObject = [NSEntityDescription insertNewObjectForEntityForName:@"FileAttachments" inManagedObjectContext: context];
        fileObject.fileName = filePaths;


NSLog(@"before context->save");
if (![context save:&error]) ...

我正试图找到NSManagedObject 第一次插入后在上下文中保存的点。当您调用[NSEntityDescription insertNewObjectForEntityForName] 时,似乎调用了awakeFromInsert,这还为时过早,因为没有任何属性。我想知道什么时候在这些新的NSManagedObjects 上调用[context save: error],这样我就可以保存更多的元信息。有什么好的,干净的方法可以做到这一点? prepareForDeletion 之类的东西,非常适合清理对象。

【问题讨论】:

也许我误读了您的问题,但是当您在最后一行调用[context save:&error] 时,托管对象没有保存吗?或者您是否希望接收某种保存事件的通知,以便您可以在其他地方为其定义处理程序? 元信息是什么意思?正如 Tim 建议的那样,对象保存在 [context save:error] 方法中。 我想要一个更集中的地方,这样我就可以将所有保存后的代码放在一起。现在,它会分散在我创建 FileAttachments 对象然后保存上下文的任何地方。 prepareForDeletion 就是一个完美的例子。我想没有任何等效的“prepareToSave”方法可用。 为什么不做一个更集中的地方,然后从当前正在做自己工作的每个方法中调用它? 【参考方案1】:

你可以继承你的 NSManagedObjectContext 并覆盖 save: 方法。您可以在此时运行您的“集中式”代码,然后调用超类的 save:。对超类 save: 方法的调用是在实际保存时,就像其他人所说的那样。

【讨论】:

【参考方案2】:

NSManagedObjectContext 生成许多可能是您正在寻找的 NSNotification。查看 NSManagedObjectContextDidSaveNotification 和 NSManagedObjectContextObjectsDidChangeNotification 的文档。

【讨论】:

以上是关于核心数据:NSManagedObject 何时插入上下文并保存?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone核心数据可以缓存NSManagedObject吗?

创建 NSManagedObject 的副本

调用 NSManagedObject 方法会引发 EXC BAD ACCESS

Swift3 - 在核心数据中插入关系

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

是不是不能复制一个核心数据NSManagedObject?