NSArrayController获取vs过滤谓词

时间:2011-09-08 00:52:20

标签: cocoa nsarraycontroller

我正在开发一款Mac应用,并且正在努力让谓词过滤器正常工作。你应该如何使用NSArrayController的fetch vs过滤器谓词?

我正在使用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]);
}

2 个答案:

答案 0 :(得分:3)

似乎关键字“已删除”对核心数据有一些未知的意义。我重命名了我的财产,它解决了这个问题。此博客文章还提到了同一问题:http://roobasoft.com/blog/2006/04/25/secret-core-data-reserved-keywords/

答案 1 :(得分:3)

根据我的理解,fetchPredicate在商店级别执行,在已经检索到对象后,在内存中执行filteringPredicate。