我正在创建一个方法来删除在上次同步时未更新的所有NSManagedObject。
- (void)removeStaleObjects {
// Delete objects that have not been updated in this sync.
NSPredicate *stalePredicate = [NSPredicate predicateWithFormat:@"updated < %@", self.syncStart];
NSArray *staleObjects = [Node MR_findAllWithPredicate:stalePredicate];
for (Node *n in staleObjects) {
[[NSManagedObjectContext MR_defaultContext] deleteObject:n];
}
}
代码在MR_findAll ...行
上一直失败[__NSDate objCType]: unrecognized selector sent to instance
我已经使用Apple文档检查了我的语法,我99%肯定我正在创建谓词,startDate只是
_startDate = [NSDate date];
在我同步之前运行。然后我同步后打电话给
[self removeStaleObjects];
有谁知道我搞砸了哪里?
更新:我可以通过将更新时间存储为双精度来实现它。但是,我仍然有兴趣让它与NSDates合作,所以如果有人想出来的话,请在这里发布。
答案 0 :(得分:1)
它也向我看来你的谓词格式正确。以下是您可以做的几件事:
1)调试时,打印出该谓词。你应该看到类似的东西:
updatedDate < {some integer value}
日期作为整数存储在封面下,谓词也会正确转换它。如果你的谓词不能在调试器中打印,你马上就会知道
2)检查 updatedDate 类型。确保这是一个约会(我相信它已经是一个约会,但你没有在你的问题中指明)
3)确保 Node 对象上有 updatedDate 属性。
答案 1 :(得分:1)
问题是属性的名称“已更新”。它与isUpdated
的{{1}}方法冲突。 (有关“已删除”属性的类似问题,请参阅Core Data NSPredicate "deleted == NO" does not work as expected。)
如果重命名属性,一切都按预期工作。