我需要帮助......在这方面已经太久了。
当我可以正确查询 NSManagedObject 但当我去检查实际数据存储时(在多次上下文保存无误后)数据不存在时,通常是什么问题?
我的假设是,唯一合乎逻辑的结论是存在线程问题。这是正确的吗?
最佳答案
视情况而定。
如果您从直接附加到持久存储的上下文中查询对象,那么一切都应该没问题。
如果您从内存上下文查询它们,它具有直接附加到持久存储的父上下文(这是多线程 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];
}
关于ios - ManagedObjectContext 保存在内存中,但不在磁盘上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32468411/