NSArrayController的fetchPredicate没有按预期工作

时间:2013-07-06 12:09:40

标签: macos cocoa core-data nspredicate nsarraycontroller

我编写了一个使用Core Data来保存朋友的应用。 NSTableView应该显示所有朋友,根据他们的状态(在线,离线,标记为收藏)彼此分开。 要获取某个部分的特定朋友,我使用NSArrayController。

在下面的代码中,您可以看到我在特定阵列控制器上设置的谓词。

_onlineFriendsController.fetchPredicate = [NSPredicate predicateWithFormat:@"(favourite = NO || favourite = nil) && id in %@", self.onlineFriendsID];
_offlineFriendsController.fetchPredicate = [NSPredicate predicateWithFormat:@"(favourite = NO || favourite = nil) && not (id in %@)", self.onlineFriendsID;

_onlineFriendsController按预期工作:它会吸引不受欢迎但在线的朋友。但是,_offlineFriendsController不起作用。它吸引了所有不受欢迎的朋友,尽管他们有空。

我还尝试使用块设置谓词,以便能够更好地调试它。

_offlineFriendsController.fetchPredicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
    if (![[evaluatedObject valueForKey:@"favourite"] boolValue]) {
        if (![self.onlineFriendsID containsObject:[evaluatedObject valueForKey:@"id"]]) {
            return YES;
        }
    }
    NSLog(@"%@", [evaluatedObject valueForKey:@"name"]);
    return NO;
}];

对于在线的每个人都返回NO。事实证明_offlineFriendsController无论如何都取得了所有朋友。我究竟做错了什么?我只设置了控制器的managedObjectContext,sortDescriptors,fetchPredicate和entityName。 filterPredicate和fetchPredicate有什么区别? filterPredicate只是在没有实际做某事的情况下搞砸一切。

非常感谢任何帮助,谢谢。

0 个答案:

没有答案
相关问题