使用 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 中的值并返回键数组
在iOS中的字典中使用字典数组的NSPredicate进行过滤