1

我编写了一个使用 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 只是在没有实际做某事的情况下搞砸了所有事情。

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

4

0 回答 0