Lyt*_*tic 5 core-data nspredicate nsfetchrequest ios restkit
我有一个包含数千个实体的核心数据层,不断与服务器同步.同步过程使用获取请求来检查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
the*_*wan -1
尝试添加一个额外的属性deleted,该属性是一个默认值为 的 bool 值false。然后属性始终被设置,您可以根据您当前的需要查找true实体false。如果该值是,true那么您可以查看deleted_at以了解何时。
或者尝试将deleted_at属性设置为某个旧日期(例如 1980 年 1 月 1 日),然后任何未删除的内容都会有一个固定日期,该日期太旧而无法由用户设置。
编辑:可能存在一些deleted_at从未接触过某些实体的问题,这些实体使系统感到困惑。您也可能已将获取请求设置为以字典样式返回结果,在这种情况下,最近的更改将不会反映在获取结果中。
| 归档时间: |
|
| 查看次数: |
727 次 |
| 最近记录: |