Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法使用比较神奇记录中日期的谓词_Ios_Objective C_Core Data_Nspredicate_Magicalrecord - Fatal编程技术网

Ios 无法使用比较神奇记录中日期的谓词

Ios 无法使用比较神奇记录中日期的谓词,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

我正在创建一个方法,该方法将删除上次同步中未更新的所有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];
    }

}
我已经用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}