Ios 无法使用比较神奇记录中日期的谓词
我正在创建一个方法,该方法将删除上次同步中未更新的所有NSManagedObjectIos 无法使用比较神奇记录中日期的谓词,ios,objective-c,core-data,nspredicate,magicalrecord,Ios,Objective C,Core Data,Nspredicate,Magicalrecord,我正在创建一个方法,该方法将删除上次同步中未更新的所有NSManagedObject - (void)removeStaleObjects { // Delete objects that have not been updated in this sync. NSPredicate *stalePredicate = [NSPredicate predicateWithFormat:@"updated < %@", self.syncStart]; NS
- (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];
}
}
我已经用apple文档检查了我的语法,我99%肯定我创建的谓词是正确的,startDate只是
_startDate = [NSDate date];
在我同步之前运行。然后,在我的同步后,我打电话
[self removeStaleObjects];
有人知道我把事情搞砸了吗
更新:我能够通过将更新时间存储为双精度来让它工作。但是,我仍然有兴趣让它与NSDates一起使用,因此如果有人发现了什么,请将其发布在这里。我还认为您的谓词格式正确。以下是您可以做的几件事: 1) 调试时,打印出该谓词。您应该看到如下内容:
updatedDate < {some integer value}
updateDate<{some integer value}
日期作为整数存储在封面下,谓词也会正确地对其进行转换。如果您的谓词不能在调试器中打印,您将立即知道
2) 检查您的更新日期类型。确保这是一个日期(我相信它已经是一个日期了,但您没有在问题中指定)
3) 确保您的节点对象上有updateDate属性。问题在于属性的名称“updated”。它与NSManagedObject
的isUpdated
方法冲突。(有关具有“已删除”属性的类似问题,请参阅。)
如果重命名属性,一切都会按预期进行。作为补充说明,在MagicalRecord中,您可以使用:[Node deleteAllMatchingPredicate:StalePreDeciate]作为一行解决方案谢谢,我错过了这一行。是的,我所有的日期对象都正确填充,我可以打印出来,它们不是零。我的谓词看起来像是
(lldb)po stalePredicate$2=0x1d564f50 updated
那么,如果我将updated从Date更改为Double,为什么它会起作用呢?这可能纯粹是偶然的。甚至可能是谓词起作用,但返回错误的结果。请参阅我对上述链接问题的回答,其中我显示,如果将属性称为“已删除”,则“会发生奇怪的事情”。我想在这里也同样适用。看看文档,如果将属性更改为UpdateDate不起作用,那么,有些东西真的被弄糟了。@casademora:有文档记载,您不应该重写方法,例如isUpdated
(如果您调用属性“isUpdated”,Xcode实际上会警告您)。但是没有方法更新,因此属性“更新”是否会导致问题并不明显。我假设这是由键值访问器模式引起的(isFoo
可以是布尔属性foo
的getter方法)。不幸的是,这没有很好的文档记录,Xcode也没有发出警告。@Kronusdark:如果重命名属性,它对您有效吗?
updatedDate < {some integer value}