iOS Core Data获取新插入的,尚未保存的对象

我必须在批处理(导入过程)中的CoreData实体中创build一些数据,我想在最后“提交”或“回滚”一个错误(因此保存之间将不起作用)。

问题是我例如需要创build一个实体“人”,并在以后的进展中,我需要重新使用该实体。 但它可以在这个过程之前已经存在,或者可以在这个导入过程中创build。

所以我试图用谓词“(personId == 4711)”来获取它。 但是,虽然我已经设置了[fetchRequest setIncludesPendingChanges:YES]; 它没有find新创build的Person对象。

我读到这个问题 , 这个答案是哪个状态,这是不可能的? 我对吗?

如果是这样,我该如何解决/处理这个?

从我所知道的CoreData,这是不可能的(请纠正我,如果我错了)。

但是,即使这是可能的,您也不希望以“每个对象”为基础查询您的商店。
大型(超过几十个)import的性能影响是巨大的。

我的build议是在导入阶段创build一个由唯一标识符键入的字典(从商店现有实体中预取,并为不存在的实体创build新字典)。

注意:您应该小心,不要在multithreading环境中从不同的上下文中执行多个插入。 在这种情况下,您需要一名协调员来防止重复。

例:

存储内容:1 – > P1,3 – > P3
服务响应:1 – > Data1,2 – > Data2

algorithm:
在响应完成后,从响应中获得所有唯一的ID – > recievedIds = @ [1,2]
在创buildrecievedIds集的时候创build一个映射/字典personId – > data:
@ {1:Data1,2:Data2}

通过谓词从商店获取:
[NSPredicate predicateWithFormat:@"personId IN %@",recievedIds]
从结果数组中创build一个字典。
在这种情况下: existingItems = @ {1:P1}

通过recievedIds中的所有ID:
1)如果存在于existingItems的id更新现有的对象
2)另外创build一个新人并将数据插入到新logging中。

这只会从商店中取一次。
而且你只能保存一次。
==>只有2次去商店,而不是每个对象的旅行