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

标签 ios core-data

我需要帮助......在这方面已经太久了。

当我可以正确查询 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/

相关文章:

ios - 如何使用 YouTube API 获取 channel 名称?

objective-c - NSFetchRequest 和 predicateWithBlock

ios - 在 UIControl 中覆盖 isEnabled 以仍然允许触摸

ios - "Index out of range error"尝试读取文本文件时

ios - 阻止 SKSpriteNode 变慢

cocoa-touch - 如何使用 NSPredicate 从核心数据实体中过滤 NSDate

ios - 有没有办法让 CoreData 与服务器 API 保持同步,即使应用程序处于后台/暂停/终止状态?

ios - 核心数据一对多关系在创建新关系时被删除

core-data - Swift/核心数据/ bool 或 ObjCBool

iphone - 在获取 UITableView Section 和 Row 之后...这段代码做了什么?