如何使用 NSPredicate 过滤 NSArray

Posted

技术标签:

【中文标题】如何使用 NSPredicate 过滤 NSArray【英文标题】:How to filter an NSArray using a NSPredicate 【发布时间】:2013-11-01 22:43:39 【问题描述】:

我正在尝试过滤我拥有的 NSDictionaries 数组。

这是我的过滤器目前的样子:

NSDictionary *selectedItemDictionary = [sortedItemsArray objectAtIndex:indexPath.row];

NSMutableArray *sortedItemsMutableArrayCopy = [sortedItemsArray copy];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"dpc like %@", [selectedItemDictionary objectForKey:@"dpc"]];
[sortedItemsMutableArrayCopy filterUsingPredicate:predicate];

这就是我的selectedItemDictionary 的样子:

dc = 3;
Cmp = F;
Qty = 0;
dp = 0;

实际上,我正在尝试搜索 sortedItemsArray 并创建一个新数组,其中包含与 UITableViewCell 中所选行具有相同 dc 编号的任何内容。但是使用上面的代码,我收到了这个错误:

 -[__NSArrayI filterUsingPredicate:]: unrecognized selector sent to instance

【问题讨论】:

【参考方案1】:

filterUsingPredicate: 是您正在寻找的 NSMutable 数组的方法filteredArrayUsingPredicate:

您可以从控制台输出 __NSArrayI 得知您有一个不可变数组实例。

如果你想要一个可变数组,你需要将[sortedItemsArray copy] 更改为[sortedItemsArray mutableCopy]

【讨论】:

是的,这正是我刚刚意识到的,现在再次查看苹果文档。非常感谢您的回答,很快就会将其标记为正确。

以上是关于如何使用 NSPredicate 过滤 NSArray的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 NSPredicate 过滤 Core Data 托管对象?

iPhone如何使用NSPredicate按父实体过滤Core Data?

如何使用 NSPredicate 从另一个 NSMutableArray 中过滤 NSMutableArray

如何根据多对关系集是不是包含特定值使用 NSPredicate 进行过滤

如何制作正确过滤本地字符的 NSPredicate?

如何使用 NSFetchedResultsController 设置过滤指定组中项目的 NSPredicate