2010-07-21 3 views
2

J'essaie de trouver un bon moyen de trier les gens par leur rôle dans une entreprise spécifique. Ce qui le rend délicat, c'est qu'une personne peut avoir un ou plusieurs rôles dans différentes entreprises. À l'heure actuelle, j'ai un tableau d'objets «Personne», et chacun de ces objets est associé à un NSSet d'objets «Rôles».trier les gens par leur rôle dans une entreprise

similaires à ceci:

Person 
-personId 
-personName (NSString) 
-personRoles (NSSet) 

Role 
-roleId (NSNumber) 
-roleWeight (NSNumber) 
-roleName (NSString) 
-companyId (NSNumber) 

J'ai besoin de code qui est en mesure de résoudre quelque chose de similaire à ceci:

Trier par personne Tableau de Role.roleWeight Où Role.companyId = X

J'ai regardé les descripteurs de tri, mais ils ne semblent pas être assez pour résoudre le défi. Toutes les suggestions sont les bienvenues.

Répondre

1

Vous voulez regarder ce

How to sort an NSMutableArray with custom objects in it?

L'idée de base est que, compte tenu des deux objets personne, vous avez à dire comment ils se comparent. Est-il moins, plus grand ou sont-ils les mêmes?

- (NSComparisonResult)compare:(id)otherObject { 
    // get the role for self 
    // get the role for other object 
    // compare their weights 
    // return the right result 
} 

Pour passer dans l'id de l'entreprise, je pense que vous aurez besoin sortUsingFunction:context:, avec une fonction comme celui-ci

static int comparePersonsUsingCompanyID(id p1, id p2, void *context) 
{ 
    // cast context to a company id 
    // get the role for p1 
    // get the role for p2 
    // compare their weights 
    // return the right result 
} 
+0

Merci Lou, Comment proposeriez-vous je reçois le COMPANYID d'identifier le rôle approprié de dans la méthode 'compare'? –

+0

C'est un bon point. Il existe une variante de tri plus difficile à comprendre qui prend un pointeur de fonction C et un contexte. Celui-ci vous permettrait de passer dans l'id de l'entreprise. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html#//apple%5Fref/doc/uid/20000138-BABCEEJD –

+0

Mise à jour de la réponse avec sortUsingFunction –

1

En supposant que vous utilisez NSArray pour stocker des données (sur le magasin CoreData peut-être), vous pouvez utiliser NSArrayController. Le contrôleur prend également en charge les descripteurs de tri et NSPredicate. Dans votre cas, vous avez besoin d'un prédicat pour filtrer les personnes (où role.companyId = x) et trier les descripteurs à trier par roleWeight.

Questions connexes