ManagedObjectContext保存在内存中,但不在磁盘上

时间:2015-09-08 22:44:29

标签: ios core-data

我需要帮助......已经这么久了。

当我能够正确查询NSManagedObject但是当我去检查实际的数据存储区(在多次上下文保存而没有失败之后)数据不存在时,通常会出现什么问题?

我的假设是,唯一合乎逻辑的结论是存在线程问题。这是对的吗?

1 个答案:

答案 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];
}