1

我正在制作一种方法,该方法将删除我在上次同步中未更新的所有 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

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

_startDate = [NSDate date];

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

[self removeStaleObjects];

有谁知道我在哪里搞砸了?

更新:我能够通过将更新时间存储为双精度来使其工作。但是,我仍然有兴趣让它与 NSDates 一起工作,所以如果有人想出办法,请在此处发布。

4

2 回答 2

1

在我看来,您的谓词格式正确。以下是您可以做的几件事:

1)调试时,打印出该谓词。您应该会看到如下内容:

updatedDate < {some integer value}

日期作为整数存储在幕后,谓词也可以正确转换它。如果您的谓词在调试器中不可打印,您会立即知道

2) 检查您的updatedDate类型。确保这是一个日期(我相信它已经是一个日期,但你没有在你的问题中指定)

3) 确保您的Node对象上有updatedDate属性。

于 2013-05-16T16:01:26.597 回答
1

问题是您的属性的名称“更新”。它与 的isUpdated方法相冲突NSManagedObject。(请参阅核心数据 NSPredicate “deleted == NO”对于具有“deleted”属性的类似问题无法按预期工作。)

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

于 2013-05-16T18:28:58.510 回答