我有一个包含数千个实体的核心数据层,不断与服务器同步.同步过程使用获取请求来检查deleted_at以进行软删除.在performBlockAndWait调用中有一个上下文执行保存操作.关系映射由RestKit库处理.
CoreDataEntity类是NSManagedObject的子类,它也是我们所有不同核心数据对象类的超类.它具有一些由我们所有实体继承的属性,例如deleted_at,entity_id和所有样板提取和同步方法.
我的问题是一些获取请求似乎在修改对象后返回不一致的结果.例如,删除对象(将deleted_at设置为当前日期)后:
[CoreDataEntity fetchEntitiesWithPredicate:[NSPredicate predicateWithFormat:@"deleted_at==nil"]];
Run Code Online (Sandbox Code Playgroud)
使用deleted_at == [NSDate今天]返回结果
通过额外循环结果并删除带有deleted_at集的实体,我已成功解决了这种行为,但是我无法解决相反的问题:
[CoreDataEntity fetchEntitiesWithPredicate:[NSPredicate predicateWithFormat:@"deleted_at!=nil"]];
Run Code Online (Sandbox Code Playgroud)
在相同条件下返回空数组,阻止服务器同步成功.
我确认已在对象上设置了deleted_at,并且上下文保存成功.我只是不明白在哪里重置任何缓存导致过时的结果?
谢谢你的帮助!
编辑:添加更多信息,似乎一旦这些对象中的一个被破坏,让它注册的唯一方法是再次修改该值.在修改值时,这可能是某种核心数据索引无法更新吗?
更新:RestKit似乎存在问题https://github.com/RestKit/RestKit/issues/2218