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次去商店,而不是每个对象的旅行
- RestKit并以NSManagedObject方式保存到CoreData
- 如何引用Today View Widget中的AppDelegate?
- 即使保存之后,新创build的NSManagedObject也会返回临时的objectID
- NSFetchedResultsController在合并“NSManagedObjectContextDidSaveNotification”后没有显示所有结果
- 使用NSPredicate如何使用1个实体过滤来自核心数据的值
- 显示核心数据:如果属性具有相同的名称显示一次
- 在运行时dynamic创build核心数据模型
- 无法find实体的NSManagedObjectModel
- 核心数据嵌套托pipe对象上下文和频繁死锁/冻结