使用filteredArrayUsingPredicate对Core Data获取的对象进行过滤,总是返回一个空数组

3
我正在尝试使用NSArray的filteredArrayUsingPredicate:方法来过滤一组核心数据托管对象的数组。以下是概述:
NSArray *array = self.fetchedResultsController.fetchedObjects;

NSPredicate *predicate = [NSPredicate
                          predicateWithFormat:@"name contains[c] %@", searchString];

NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];

这段代码总是返回一个空的 'filteredArray' 数组,我猜测问题出在谓词上,但我确定 'array' 中的对象都是带有名为 "name" 的键的托管对象。'searchString' 的值正确,并且我已经运行过 performFetch: 方法。


1
当您对数组进行指针运算时,会得到什么?数组中是否包含您认为的内容? - Marcus S. Zarra
是的,这个数组是空的 - 我原以为它从最初的获取中被保留了下来,但实际上没有,这是我的错误。现在我的表格视图搜索速度更快了,因为它不需要在每次搜索字符串更改时往返于数据存储。谢谢。 - petert
1个回答

6

您的谓词没问题。

我建议您仔细检查一下数组和搜索字符串:

NSArray *array = self.fetchedResultsController.fetchedObjects;

NSLog(@"array = %@",array);
NSLog(@"array count = %d",[array count]);
NSLog(@"searchString = %@",searchString);

NSPredicate *predicate = [NSPredicate
                          predicateWithFormat:@"name contains[c] %@", searchString];

NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];

谢谢 - 再次进行一些调试,无论是在代码中还是使用调试器,它都是你的好帮手。 - petert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接