NSArrayController取回vs filter谓词



我正在一个Mac应用程序上工作,我正在努力获得谓词过滤器的工作。你应该如何为NSArrayController使用fetch和filter谓词有区别吗?

我使用Core Data来存储我的记录,它们完美地显示在我的表视图中。当我使用fetch谓词时,它会正确显示记录。当我使用过滤器谓词时,它似乎不做任何事情。只是为了清楚-我一次使用一个谓词,但希望在我的代码中显示两者。

entryController = [[NSArrayController alloc] init];
[entryController setManagedObjectContext:[self managedObjectContext]];
[entryController setAutomaticallyPreparesContent:YES];
[entryController setAutomaticallyRearrangesObjects:YES];
[entryController setClearsFilterPredicateOnInsertion:NO];
[entryController setEntityName:@"Entry"];
// only displays entries where deleted is not 1
[entryController setFetchPredicate:[NSPredicate predicateWithFormat:@"deleted != %@", [NSNumber numberWithInt:1]]];
// shows all entries regardless of the deleted status
[entryController setFilterPredicate:[NSPredicate predicateWithFormat:@"deleted != %@", [NSNumber numberWithInt:1]]];
if ([entryController fetchWithRequest:nil merge:YES error:&error] == NO) {
    DLog(@"Error fetching entries: %@", error.description);
} else {
    DLog(@"Found %lu entries.", [[entryController arrangedObjects] count]);
}

看来关键字"deleted"对Core Data有某种未知的意义。我重命名了我的财产,它解决了这个问题。这篇博文也提到了同样的问题:http://roobasoft.com/blog/2006/04/25/secret-core-data-reserved-keywords/

据我所知,fetchPredicate是在存储级别执行的,而filteringPredicate是在对象已经被检索后在内存中执行的。

最新更新