【发布时间】:2014-02-14 14:08:23
【问题描述】:
我有 3 个 MOC。
- MainThread MOC 显示内容(使用 undomanager)
- 后台保存 MOC 将数据保存到磁盘(连接到存储)
- Backgorund-update MOC 从服务器下载数据,解析并稍后保存
他们是父子关系。
- 后台更新 -> 1. MainThread -> 2. 后台保存(存储)
现在,当我从后台下载数据时,我需要在主线程上禁用 undomanager,以便它们不会被撤消 - 这可能是用户同时编辑某些内容的情况。
现在的问题是这是否正确。我在后台更新线程中有该代码
//create child background context which is child of 1. MainThread
NSManagedObjectContext* context = [[AppManager sharedAppManager] createChildManagedObjectContext];
//I'M DOING ALL CHANGES ON DATA HERE
[context.parentContext.undoManager disableUndoRegistration]; //disable undo on main thread
[context save:nil]; //save changes to background thread
[context.parentContext save:nil]; //save changes to main thread
[context.parentContext processPendingChanges]; //process changes on main thread
[context.parentContext.parentContext save:nil]; //save data to disc on 3. save-thread
[context.parentContext.undoManager enableUndoRegistration]; //enable undo again
方块看起来像这样:
[context.parentContext performBlockAndWait:^{
[context.parentContext.undoManager disableUndoRegistration];
[context performBlockAndWait:^{
[context save:nil];
}];
[context.parentContext save:nil];
[context.parentContext processPendingChanges];
[context.parentContext performBlockAndWait:^{
[context.parentContext.parentContext save:nil];
}];
[context.parentContext.undoManager enableUndoRegistration];
}];
我之所以问,是因为我偶尔会遇到一些不一致的崩溃,而我真的找不到原因。
【问题讨论】:
标签: ios objective-c core-data nsmanagedobjectcontext nsundomanager