核心数据: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
,这还为时过早,因为没有任何属性。我想知道什么时候在这些新的NSManagedObject
s 上调用[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吗?