【问题标题】:Fetch data from context that is not yet committed. CoreData从尚未提交的上下文中获取数据。核心数据
【发布时间】:2016-02-03 12:59:26
【问题描述】:

我使用MagicalRecord 在默认NSManagedObjectContext 中创建了NSManagedObject 实体的多个实例(例如汽车:NSManagedObject)。

我没有保存上下文。有没有办法执行获取请求并获取已经处于持久状态的数据在默认上下文中添加的尚未提交的数据?

【问题讨论】:

  • 这应该是默认行为,除非您为获取请求设置了 includesPendingChanges=NO。

标签: ios swift core-data magicalrecord


【解决方案1】:

是的,它被提取了。请通过https://developer.apple.com/reference/coredata/nsmanagedobjectcontext查看 Apple 文档:

满足请求指定条件的对象(它是请求指定的实体的实例,如果存在则匹配请求的谓词)并且已插入上下文但尚未保存到持久存储,如果在该上下文上执行获取请求,则检索。

【讨论】:

    【解决方案2】:

    据我所知……您可以获取所有内容,然后查看对象 objectID 以确定已保存的对象。

    id all = [ctx fetch..]; 
    id savedOnly = [NSMutableArray array];
    for(id o in all) {
        if([[o objectID] isTemporary] == NO) {
            [savedOnly addObject:o];
        }
    }
    

    或者更改您的代码以使用上下文 - 这可能会更好:D


    可能使用如下谓词:

    savedOnly = [ctx fetchWithPredicate:@"... self.objectID.isTemporary=NO"];
    

    可能工作......不知道

    【讨论】:

      【解决方案3】:

      如果我们谈论的是相同的托管对象上下文 - 是的,您应该也能够获取那些未提交的对象。这是默认行为。托管对象上下文还包含未提交的对象,即尚未保存在持久存储中的对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多