J'ai inclus un espace réservé [NSNull null] dans mon tableau de sources de données combobox afin que je puisse permettre à l'utilisateur de sélectionner "none" sans réellement stocker un objet vide. Le problème est que lorsqu'un objet réel est ajouté au tableau de source de données, je dois trier le tableau:comment trier un NSMutableArray qui contient une instance de NSNull
[self.mutableArrayOfStrings sortUsingSelector:@selector(caseInsensitiveCompare:)];
Cette ligne produit un SIGKILL.
J'ai le même problème avec le tableau compagnon de NSManagedObject, qui a également un espace réservé NSNull:
NSSortDescriptor *sortDescriptorName = [[NSSortDescriptor alloc] initWithKey:@“name” ascending:YES selector:@selector(caseInsensitiveCompare:)];
NSArray *sortDescriptorsNames = [[NSArray alloc] initWithObjects: sortDescriptorName, nil];
[self.mutableArrayOfMOs sortUsingDescriptors:sortDescriptorsNames];
Si mutableArrayOfMOs contient un objet NSNull, cette ligne produit également un SIGKILL.
Bien sûr, je pourrais copier les objets non nuls dans un tableau séparé, le trier, réinsérer l'objet nul et l'assigner à la propriété du tableau - mais cela encombrerait mon code. Ne devrait-il pas y avoir des moyens de tri qui ne s'étouffent pas sur NSNull? Après tout, Apple a fourni NSNull explicitement pour nous permettre de l'inclure dans les tableaux.
Ou encore mieux, vous pouvez trier en utilisant 'sortUsingComparator:', qui prend un bloc 'NSComparator' et vous évite d'avoir à ajouter une fonction hors-lieu au milieu de votre code. –
Merci pour votre aide! Je vois à partir de la réponse de Mark que je courais au-dessus des comparateurs. En ce qui concerne les solutions, la suggestion de itaiferber semblait plus facile, donc je l'ai essayé en premier. Je posterai le résultat en tant que réponse séparée. La suggestion de Mark fournirait plus de flexibilité sur la directionnalité, selon ce lien: http://thoughts.digital-transience.com/2009/03/sorting-nsarrays/comment-page-1/ – Wienke