iphone& Objective C - 使用NSPredicate过滤数组?

时间:2010-10-22 17:12:06

标签: iphone objective-c arrays filtering nspredicate

我有一个对象数组(用户) 每个用户都有一个名为“devices”的nsset 是否可以进行过滤,以便数组返回具有特定名称的设备的所有用户。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"devices.category==%@", @"mobile"];
myArray = [allUsersArray filteredArrayUsingPredicate:predicate];

2 个答案:

答案 0 :(得分:5)

你几乎得到它,只是一点点。

每个User都有一组Devices。这意味着当您调用[aUser valueForKeyPath:@"devices.category"]时,它将为您提供设备类别聚合的集合

换句话说,如果您的用户有2台设备,并且他们(分别)拥有category“移动”和“桌面”,那么"devices.category"将返回(mobile, desktop)。这是一个矢量值。它包含多个元素。

但是,您将此与标量值(单个元素)@"mobile"进行比较。

我认为你想要的是想要选择至少拥有一个属于“移动”类别的设备的所有用户,对吗?如果是这种情况,那么您只需使用ANY关键字,就这样制作谓词:

[NSPredicate predicateWithFormat:@"ANY devices.category = %@", @"mobile"]

有关这些聚合函数的更多信息,请查看Predicate Programming Guide

答案 1 :(得分:0)