2009-09-25 7 views
0

Je n'arrive pas à trier un NSNumber en utilisant NSSortDescriptor. Pour une raison quelconque, il ne triera pas dans le bon ordre. Qu'est-ce que je fais mal?Comment trier NSNumber avec NSSortDescriptor?

- (NSNumber *)sortNumber { 

NSNumber *sum = [NSNumber numberWithFloat:([self.capacity floatValue]/[self.availability floatValue])]; 

return sum; 
} 

Il est défini comme un Int32 dans le xcdataModel et appelé par cette classe à trier.

- (NSFetchedResultsController *)fetchedResultsController { 
if (fetchedResultsController == nil) { 
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease]; 
    [fetchRequest setReturnsObjectsAsFaults:NO]; 
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext]]; 
    NSArray *sortDescriptors = nil; 
} if ([fetchSectioningControl selectedSegmentIndex] == 0) { 
     sortDescriptors = [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"sortNumber" ascending:YES selector:@selector(compare:)] autorelease]]; 
} 
[fetchRequest setSortDescriptors:sortDescriptors]; 

EDIT: Oui, dans la lumière froide du jour, cela nécessite un peu plus d'explications. Je vais essayer d'expliquer le projet. Ceci est une application CoreData, les valeurs 'capacity' et 'availability' sont dérivées de l'analyse d'un fichier XML avec SAX et de les attacher au Managed Object Model où elles sont définies comme Strings, à l'origine elles auraient été numériques dans le XML.

Celles-ci sont ensuite définies dans une classe où le calcul ci-dessus a été fait et attaché au même modèle d'objet (si le code ci-dessus est correct, c'est peut-être là où le problème est?). Tout cela a été dans l'effort d'obtenir une valeur en pourcentage que je voudrais utiliser pour trier un TableView. (BTW, je me rends compte qu'ils ont besoin de permutation, oops) Le deuxième bit de code est où cela se produit en utilisant NSFetchResultsController et ManagedObjectContext. Je sais que ce bit fonctionne parce que je trie aussi cette liste par d'autres attributs mis à si selectedSegmentIndex == 0 etc Ils trient tous correctement. J'espère que cela a un peu plus de sens.

+0

est-ce une application CoreData? pourriez-vous s'il vous plaît inclure un peu plus de code pour nous aider à résoudre le problème? – slf

+0

J'ai essayé d'ajouter plus de détails au projet, voir ci-dessus. Comme toujours avec ce genre de choses, il est difficile de savoir où s'arrêter. Le modèle d'objet de gestion est difficile à publier, mais fondamentalement, il n'a qu'une seule relation attachée qui n'est pas ce critère. Peut-être devrait-il être? – Jim

Répondre

0
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortNumber" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

[request setSortDescriptors: sortDescripteurs];

vous pouvez utiliser NSSortDescriptor sans appeler la méthode de comparaison. Il se classera dans l'ordre désiré.