我正在为我的应用程序中的任务列表构建一个过滤器,当我尝试组合所有过滤器时,我看不到任何数据。
预期的结果是,如果我选择所有过滤器,我将看到我的整个数据集。
下面是过滤器的简化版本——通过选择完成和未完成的任务状态来说明问题。
2015-06-29 14:33:49.611 TasksApp[32174:1144416] ADD FILTER FOR INCOMPLETE TASKS
2015-06-29 14:33:49.612 TasksApp[32174:1144416] ADD FILTER FOR COMPLETE TASKS
2015-06-29 14:33:49.613 TasksApp[32174:1144416] TEMP ARRAY COUNT: 5
2015-06-29 14:33:49.613 TasksApp[32174:1144416] LOCAL RESULTS FILTERED: (
)
我正在使用以下代码创建和添加复合过滤器:
if ([[[defaults dictionaryRepresentation] allKeys] containsObject:@"myTasksIncomplete"]) {
if([defaults boolForKey:@"myTasksIncomplete"]){
NSLog(@"ADD FILTER FOR INCOMPLETE TASKS");
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(Status == %@)", @"Incomplete"];
[predicatesArray addObject:predicate];
}
}
if ([[[defaults dictionaryRepresentation] allKeys] containsObject:@"myTasksComplete"]) {
if([defaults boolForKey:@"myTasksComplete"]){
NSLog(@"ADD FILTER FOR COMPLETE TASKS");
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(Status == %@)", @"Complete"];
[predicatesArray addObject:predicate];
}
}
if ([[[defaults dictionaryRepresentation] allKeys] containsObject:@"myTasksToday"]) {
if([defaults boolForKey:@"myTasksToday"]){
//not setup yet
}
}
//All of the predicates
NSLog(@"TEMP ARRAY COUNT: %li", [tempArray count]);
NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicatesArray];
self.localResults = [[tempArray filteredArrayUsingPredicate:compoundPredicate] mutableCopy];
NSLog(@"LOCAL RESULTS FILTERED: %@", self.localResults);
最佳答案
当您使用 +[NSCompioundPredicate andPredicateWithSubpredicates:]
创建 NSCompoundPredicate
时,它将仅传递通过每个 子谓词。您可能需要 +[NSCompioundPredicate orPredicateWithSubpredicates:]
,这将传递通过任何子谓词的项。
关于ios - 我的复合谓词应该如何构造才能包含在内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31123173/