无法使用比较Magical Record中日期的谓词

时间:2013-05-16 15:46:55

标签: 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];
    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合作,所以如果有人想出来的话,请在这里发布。

2 个答案:

答案 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。)

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