如何在iOS中使用对象的对象数组值

时间:2015-11-03 09:48:41

标签: ios objective-c arrays nspredicate

我有一个Exit对象。 每个Exit都有一个Category对象数组。

对象看起来像这样:

类别:( id ,名称)

退出:( id ,姓名,号码,......,NSArray(类别),...)

我想使用NSPredicate按类别数组中的类别名称来过滤退出,但我不确定如何写下来。 如果我想过滤退出退出名称,例如,我会这样做

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.exitName = %@", name];
NSArray *results = [exits filteredArrayUsingPredicate:predicate];

但我不确定如何进入Categories数组并按类别名称搜索。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

试试这个

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF.exitName.category_name CONTAINS[c] %@", name];
NSArray *results = [exits filteredArrayUsingPredicate:predicate];

答案 1 :(得分:0)

试试这个谓词

NSPredicate *matchingCategory = [NSPredicate predicateWithFormat:@"SUBQUERY(categories, $c, name CONTAINS[cd] %@).@count > 0", categoryName];

<强>解释

SUBQUERY()函数创建一个与给定子谓词匹配的对象数组。在这种情况下,该子谓词是name CONTAINS[cd] %@。它的工作方式是迭代集合(第一个参数),指定名称$c(第二个参数)来引用每个元素,然后测试子谓词是否与该元素匹配。如果匹配,则将其添加到数组中。

SUBQUERY()完成后,使用@count属性聚合数组。如果有任何匹配(@count > 0),则退出的总谓词将与正在测试的出口匹配。