我是Core Data的新成员,我对如何以正确的方式完成这些任务有一些疑问。我想我需要一个temporaryManagedObjectContext来处理临时实体,而用户正在编辑一个新的实体。当用户点击保存那些数据时,我想将这些实体插入到persistedManagecObjectContext然后saveContext。达到此目的的最佳做法是什么?由于我不想保存在临时上下文中,因此使用线程是强制性的?核心数据和托管对象上下文
谢谢你的知识!
我是Core Data的新成员,我对如何以正确的方式完成这些任务有一些疑问。我想我需要一个temporaryManagedObjectContext来处理临时实体,而用户正在编辑一个新的实体。当用户点击保存那些数据时,我想将这些实体插入到persistedManagecObjectContext然后saveContext。达到此目的的最佳做法是什么?由于我不想保存在临时上下文中,因此使用线程是强制性的?核心数据和托管对象上下文
谢谢你的知识!
您需要将临时ManagedObjectContext(MOC)中的更改合并到持久化的一个中。这是我如何实现这一目标的一个例子。 即时通讯使用线程(每个线程一个MOC),但我很肯定它应该工作得很好,没有线程。
调用此方法保存在tempMOC更改:
- (void) saveNewEntry {
NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
// Subscribe to "NSManagedObjectContextDidSaveNotification"
// ..which is sent when "[tempMOC save];" is called.
[dnc addObserver: self
selector: @selector(mergeChanges:)
name: NSManagedObjectContextDidSaveNotification
object: tempMOC];
// Save changes
[tempMOC save];
// Remove subscribtion
[dnc removeObserver: self
name: NSManagedObjectContextDidSaveNotification
object: tempMOC];
}
...这将通知断火到:
- (void) mergeChanges: (NSNotification*) saveNotification {
// If youre using threads, this is necessary:
[self performSelectorOnMainThread: @selector(mergeToMainContext:)
withObject: saveNotification
waitUntilDone: NO];
// ...otherwise, you could do the merge in this method
// [persistedMOC mergeChangesFromContextDidSaveNotification: saveNotification];
}
...这反过来又要求:
- (void) mergeToMainContext: (NSNotification*) saveNotification {
[persistedMOC mergeChangesFromContextDidSaveNotification: saveNotification];
}
这说明你可以尝试使用多情境核心日期作品!谢谢你,你救了我的一天! – Samui 2011-12-17 01:38:07
我有同样的问题(编辑器需要一个对象,所以创建...但如果取消,扔掉那个对象)。我结束了一个更强力的办法,不过,正是为了避免所有多个客体环境和合并:
我在所有对象使用“是临时”字段。当我需要建立一个“临时”的对象我有我的数据层的方法是创建一个对象正常,但随后在返回前翻转isTemp =真。
然后,在我的 “对象编辑器” onCancel有:
if (obj.isTemp) {
[context deleteObject: ... ];
}
的onSave是:
if (obj.isTemp) obj.isTemp = NO;
[context saveAsUsual...];
注:没有解决这里有没有抄袭 “扔掉” 改变成问题直到用户确认保存为止的现有对象。否则,改变会坐在那里,像一个木马等待时,一些其他的代码保存共享方面得到应用。
我没有时间来写一个完整的答案,但这里http://www.cocoanetics.com/2012/07/multi-context-coredata/ – Abizern 2013-06-10 14:47:13