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

ary*_*axt 0 arrays iphone filtering objective-c nspredicate

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

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"devices.category==%@", @"mobile"];
myArray = [allUsersArray filteredArrayUsingPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)

Dav*_*ong 5

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

每个User都有一套Devices.这意味着,当你调用[aUser valueForKeyPath:@"devices.category"],它会给你一个采集设备类别的聚集.

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

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

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

[NSPredicate predicateWithFormat:@"ANY devices.category = %@", @"mobile"]
Run Code Online (Sandbox Code Playgroud)

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