使用 NSPredicate 过滤对象中的数组

Posted

技术标签:

【中文标题】使用 NSPredicate 过滤对象中的数组【英文标题】:Filter Arrays in Objects using NSPredicate 【发布时间】:2014-03-20 19:16:43 【问题描述】:

我需要通过来自另一个数组内的对象的属性来过滤数组。 假设我有两个类:

StoreList.h

@interface StoreList : NSObject 
  NSMutableArray *storesArray; //Array containing Store objects

商店.h

@interface Store : NSObject 
  NSString *name;

所以,我有一个 NSArray (storeListArray),其中包含一些 StoreList 对象。然后,我的数组是这样的:

storeListArray = [
 StoreList:
    storesArray: 
                  stores[
                    store: 
                     name: "Store1"
                    ,
                    store: 
                     name: "Store2"
                    
                  ]
                ,
    storesArray: 
                  stores[
                    store: 
                     name: "Store1"
                    ,
                    store: 
                     name: "Store2"
                    
                  ]
                
   
];

好吧,我的问题是:如何使用 NSPredicate 通过 Store 对象的“名称”属性过滤 storeListArray?

我试图做这样的事情,但这不起作用:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY storeList CONTAINS[cd] %@", filterString];
self.filteredStores = [storeListArray filteredArrayUsingPredicate:predicate];
return self.filteredStores;

感谢您的帮助!

【问题讨论】:

【参考方案1】:

试试这个,

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"ANY SELF.storesArray.name == %@", filterString];

NSArray * videoArray = [storeListArray filteredArrayUsingPredicate:predicate];

【讨论】:

【参考方案2】:

你有没有像下面这样尝试过,

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"name == %@", filterString];

NSArray * videoArray = [storeListArray filteredArrayUsingPredicate:predicate];

谢谢!

【讨论】:

是的,这是我做的第一件事。但它给了我错误:* 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[StoreList valueForUndefinedKey:]:这个类不符合键名的键值编码。” 如果 storeListArray 包含 store 对象,而不是 store 对象的数组,则上述内容将起作用。也许在循环中过滤每个子数组?还是在过滤之前展平 storeListArray? @JoshuaKaden 我尝试执行循环,但无法返回过滤后的列表。你能给我一些使用扁平化的例子吗? 当然;只需查看 [***.com/questions/17087380/flatten-an-nsarray].

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

使用 NSPredicate 过滤 NSDictionary 中的值并返回键数组

使用 NSPredicate 搜索/过滤自定义类数组

在iOS中的字典中使用字典数组的NSPredicate进行过滤

NSPredicate 对象模型数组过滤器在 Swift 4.0 中无法正常工作

使用 NSPredicate 过滤核心数据中的对象

NSPredicate 与具有多个对象的 Array 一起使用