小编Lyt*_*tic的帖子

核心数据获取谓词零检查失败/意外结果?

我有一个包含数千个实体的核心数据层,不断与服务器同步.同步过程使用获取请求来检查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

core-data nspredicate nsfetchrequest ios restkit

5
推荐指数
1
解决办法
727
查看次数

标签 统计

core-data ×1

ios ×1

nsfetchrequest ×1

nspredicate ×1

restkit ×1