我需要帮助......已经这么久了。
当我能够正确查询NSManagedObject但是当我去检查实际的数据存储区(在多次上下文保存而没有失败之后)数据不存在时,通常会出现什么问题?
我的假设是,唯一合乎逻辑的结论是存在线程问题。这是对的吗?
答案 0 :(得分:1)
取决于
如果你从上下文查询对象,那就是直接附加到持久存储,那么一切都应该没问题。
如果你从内存上下文中查询它们,这些上下文有直接到persitent-store-attached作为它的父上下文(这是多线程CoreData使用的常见情况),那么你应该将更改推送到父上下文然后在该父上下文上调用-[save:]
。
注意。我假设,你做为子MO上下文执行更改合并。你呢?示例代码:
// Core-Data MOC creation
- (NSManagedObjectContext *)managedObjectContext {
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
_managedObjectContext = ... ; // creating context, if not yet
...
if (_managedObjectContext != nil) {
[_managedObjectContext performBlockAndWait:^{
// //NOTE: iCloud-related
// [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(remoteChangesImport:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:coordinator];
}];
}
// register merge callback for child contexts!
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(localChangesSave:)
name:NSManagedObjectContextDidSaveNotification
object:_managedObjectContext];
return _managedObjectContext;
}
- (void)localChangesSave:(NSNotification *)notification {
// Changes in child context. Need to merge...
[self.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
}