不能使用比较魔法logging中的date的谓词

我正在做一个方法,将删除所有我没有更新在上次同步的NSManagedObjects。

- (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 

我已经用苹果文档检查了我的语法,并且我正确地创build谓词是99%,startDate只是

 _startDate = [NSDate date]; 

在我的同步之前运行。 然后我同步后,我打电话

 [self removeStaleObjects]; 

有谁知道我在搞什么?

更新 :我可以通过将更新时间存储为双精度来获得它的工作。 不过,我仍然希望能够与NSDates合作,所以如果有人有什么想法,请在这里发布。

问题是您的属性的名称“更新”。 它与NSManagedObjectisUpdated方法冲突。 (请参阅核心数据NSPredicate“deleted == NO”对于“已删除”属性的类似问题无法正常工作 )。

如果您重命名属性,一切都按预期工作。

它也看起来我的谓词格式正确。 这里有几件事你可以做:

1)debugging时,打印出谓词。 你应该看到像这样的东西:

 updatedDate < {some integer value} 

date以整数forms存储在封面下,谓词也可以正确转换。 如果您的谓词不能在debugging器中打印,您马上就会知道

2)检查你的updatedDatetypes。 确保这是一个date(我相信它已经是一个date,但你没有在你的问题中指定)

3)确保你的Node对象具有updatedDate属性。