Je récupère des données à partir du stockage Core Data
en utilisant un NSFetchRequest
et stocke ces données dans un array
- tout fonctionne très bien. Dans une prochaine étape, je veux trier ce array
en utilisant NSSortDescriptors
comme ceci:Le bloc NSComparator n'est pas appelé
array = [array sortedArrayUsingDescriptors:[NSArray arrayWithObjects:
[NSSortDescriptor sortDescriptorWithKey:@"score" ascending:NO],
[NSSortDescriptor sortDescriptorWithKey:@"score" ascending:NO comparator:^NSComparisonResult(id obj1, id obj2) {
if ([[[array objectAtIndex:[obj2 integerValue]] valueForKey:@"lessImportantItems"] containsObject:[array objectAtIndex:[obj1 integerValue]]]) {
return (NSComparisonResult)NSOrderedAscending;
} else {
return (NSComparisonResult)NSOrderedDescending;
}
}],
[NSSortDescriptor sortDescriptorWithKey:@"createdAt" ascending:NO], nil]];
Le problème que j'ai est que le NSComparator
bloc dans la seconde NSSortDescriptor
n'est pas appelé (j'ai essayé de NSLog
). Pour donner quelques informations à ma structure de données, voici la section graphique d'objets Core Data
pertinents:
Qu'est-ce que l'application n'est-il compare les éléments les uns aux autres. Dans un premier temps, le gagnant d'une comparaison par paire obtient un incrément de score
. Mais aussi je marque une priorité appariée, c'est-à-dire que j'ajoute une relation un-à-plusieurs lessImportantItems
entre le gagnant et le perdant. Donc, dans mon tableau, j'ai d'abord essayer de trier par score
, puis, lorsque score
sont égaux, j'essaie aussi de trier par priorité appariée.
Peut-être que c'est parce que j'utilise score
comme comparateur key
deux fois de suite? Mais, d'autre part, NSComparator
ne permet pas de passer un relationship
en tant que key
non plus.
Je ne peux pas sembler craquer celui-ci. Quelqu'un a des idées? Ou peut-être que je devrais adopter une approche différente du tri?
Donc le résultat final que vous voulez est pour les articles à trier? Dans n'importe quelle méthode? Ou une variante de la vôtre? – geekchic
Eh bien, c'est comme il dit avec des descripteurs de tri: (1) trier par score, puis (2) si le score est égal, trier par plus important un-à-un, et enfin (3) trier par date créée (sera réaliste pertinent pour les items de la queue, c'est-à-dire ceux qui ont un score égal à 0 - pas encore comparé). Est-ce ce que vous demandiez? – artooras