iphone & Objective C - Фильтрация массива с использованием NSPredicate? - PullRequest
0 голосов
/ 22 октября 2010

У меня есть массив объектов (Users), у каждого пользователя есть nsset с именем «devices». Можно ли фильтровать, чтобы массив возвращал всех пользователей, у которых есть устройство с определенным именем.

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

Ответы [ 2 ]

5 голосов
/ 22 октября 2010

Вы почти получили это, только немного.

Каждый User имеет набор Devices. Это означает, что когда вы вызываете [aUser valueForKeyPath:@"devices.category"], он даст вам коллекцию совокупности категорий устройств.

Другими словами, если у вашего пользователя есть 2 устройства, и они (соответственно) имеют category «мобильных» и «настольных», то "devices.category" вернет (mobile, desktop). Это векторное значение. Содержит несколько элементов.

Однако вы сравниваете это со скалярным значением (один элемент), @"mobile".

Я думаю, что вы хотите выбрать всех пользователей, у которых есть хотя бы одно устройство в категории «мобильные», верно? Если это так, то вам просто нужно использовать ключевое слово ANY и сделать свой предикат таким образом:

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

Для получения дополнительной информации об этих агрегатных функциях см. Руководство по программированию предикатов .

0 голосов
/ 22 октября 2010
...