NSPredicate使用RLMResults作为参数

时间:2015-01-03 21:29:43

标签: ios nspredicate realm

我试图通过使用NSPredicate进行过滤来获得两组Realm数据(并且是不同的对象)之间的区别,但是我发现了一个错误,我无法理解。我的代码:

RLMResults *topStories = [KFXTopStory allObjects];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NONE threadId = %@.topStoryId", topStories];
RLMResults *objectsToDelete = [KFXThread objectsWithPredicate:predicate];

错误:

*** Terminating app due to uncaught exception 'Invalid predicate', reason: 'Predicate with ANY modifier must compare a KeyPath with RLMArray with a value'

查询似乎表明必须将keypath与值进行比较,而不是与另一个keypath进行比较。这种类型的查询甚至可以与Realm一起使用吗?它看起来应该是,所以我哪里错了?这个或更好的解决方案的任何帮助都会很棒 - 谢谢!

编辑:

当然,在我发布这篇文章之后,我得到了一些有用的东西。但我还是想知道是否有更好的方法。工作代码:

RLMResults *topStories = [KFXTopStory allObjects];
NSMutableArray *topStoryIds = [[NSMutableArray alloc] initWithCapacity:100];

for (KFXTopStory *story in topStories) {
    [topStoryIds addObject:story.topStoryId];
}

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (threadId IN %@)", topStoryIds];
RLMResults *objectsToDelete = [KFXThread objectsWithPredicate:predicate];

1 个答案:

答案 0 :(得分:0)

使用NSSet而不是数组(去除重复订购的产品)可能会更快,但是否则您的解决方案目前处于最佳状态。 (类似于realm cocoa: predicate to select items not related)。