12
votes

Comment trier une nsmutableRayRay d'objets gérés via un graphique d'objet

Je suis nouveau à l'appui sur les données de base de l'iPhone 3.0 de l'iPhone 3.0 d'Apple et je suis relativement nouveau dans le développement de l'iPhone. Ma question est sur un tri légèrement plus "complexe" que celui couvert dans les documents. Je soupçonne que je fais une hypothèse fondamentale incorrecte.

Comment puis-je régler une collection pré-extraite d'objets gérés par une propriété contenue plusieurs couches plus profondes dans la collection?

exemple: Farm a 1 à plusieurs pour Cowboy (Farm.Cowboys) Cowboy a 1 à 1 à une personne (cowboy.person) Personne a nommé (personne.lastname)

Le graphique de l'objet entier a été récupéré et les cow-boys sont affichés dans un UitailView. Maintenant, comment puis-je trier les cow-boys par lastname? Ai-je besoin de les récupérer? Et si oui, comment puis-je faire cela avec un tri imbriqué?

Actuellement, j'essaie de trier un NsmutableArray de Cowboys ([Farm.Cowboys Allobjects]) qui convient à ces propriétés sur Cowboy. Mais je ne suis pas sûr de faire ce travail lors du tri d'une collection de cow-boys par cowboy.person.lastname?


0 commentaires

4 Réponses :


0
votes

Espérons que quelqu'un a une meilleure solution. Cependant ....

Un objet wrapper avec un sélecteur de comparaison et une référence à l'objet de tri fonctionne. Ce n'est pas aussi propre que je le souhaiterais, j'espère que quelqu'un d'autre va venir avec une alternative.

Essence Cowboywrapper a une propriété de cow-boy. Cowboywrapper a également un sélecteur de comparaison. En construisant et en tenant la synchronisation d'une nsmutableArray de CowBoywrappers, trier fonctionne.


0 commentaires

21
votes

Si vous pouvez cibler 10,6, vous pouvez accomplir cela à l'aide de blocs. Comme: xxx


2 commentaires

Il convient également de noter, si vous utilisez un nsmutableArray , vous pouvez simplement utiliser SHYSUTUTISCOMPARATOR: à la place, si vous le souhaitez.


Vous devez supprimer le couler sur NSComparator.



5
votes

Vous pouvez trier comme si:

[myUnsortedArrayOfCowboys sortedArrayUsingDescriptors:
    [NSArray arrayWithObject:
        [NSSortDescriptor
            sortDescriptorWithKey:"person.lastName"
            ascending:YES]]];


0 commentaires

1
votes

Si vous souhaitez trier le numéro et la chaîne, utilisez cette

NSArray *unsortedArray = [NSArray arrayWithObjects:@"Hello", @"4", @"Hi", @"5", @"2", @"10", @"1", nil];
NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^(id firstObject, id secondObject) {
    return [((NSString *)firstObject) compare:((NSString *)secondObject) options:NSNumericSearch];
}];


0 commentaires