从尚未提交的上下文中获取数据。核心数据

Posted

技术标签:

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

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

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

【问题讨论】:

这应该是默认行为,除非您为获取请求设置了 includesPendingChanges=NO。 【参考方案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】:

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

【讨论】:

以上是关于从尚未提交的上下文中获取数据。核心数据的主要内容,如果未能解决你的问题,请参考以下文章

在获取永久 ID 后,核心数据无法为对象完成故障

获取未保存数据时的奇怪核心数据行为

核心数据单一托管对象上下文和两个线程

核心数据获取...为啥在将托管对象插入上下文 A 并保存上下文 A 后,不使用上下文 B 获取托管对象?

获取后核心数据关系为零

具有核心数据的 Alamofire 对象映射器