我编写了一个使用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只是在没有实际做某事的情况下搞砸一切。
非常感谢任何帮助,谢谢。