2010-10-22 14 views
0

J'ai un tableau d'objets (Utilisateurs) chaque utilisateur a un nsset nommé "périphériques" Est-il possible de filtrer afin que le tableau renvoie tous les utilisateurs qui ont un périphérique avec un nom spécifique.iphone & Objective C - Filtrer un tableau en utilisant NSPredicate?

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

Répondre

5

Vous avez presque obtenu, juste un peu au large.

Chaque User a un ensemble de Devices. Cela signifie que lorsque vous appelez [aUser valueForKeyPath:@"devices.category"], ça va vous donner une collection de l'agrégation des catégories de dispositifs.

En d'autres termes, si l'utilisateur dispose de 2 appareils, et ils (respectivement) ont un category de « mobile » et « bureau », puis "devices.category" retournera (mobile, desktop). Ceci est une valeur de vecteur. Il contient plusieurs éléments.

Cependant, vous comparez ceci à une valeur scalaire (un seul élément), @"mobile".

Ce que je pense que vous voulez est de sélectionner tous les utilisateurs qui ont au moins un appareil qui est dans la catégorie "mobile", correct? Si tel est le cas, il vous suffit d'utiliser le mot-clé ANY et faites votre prédicats ainsi:

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

Pour plus d'informations sur ces fonctions d'agrégation, consultez la Predicate Programming Guide.

+0

merci beaucoup, exactement ce que je voulais – aryaxt