Trier NSArray d'objets personnalisés par leurs propriétés NSDate
J'essaie de trier un NSArray qui est rempli avec des objets personnalisés. Chaque objet possède une propriété startDateTime
qui est de type NSDate.
Le code ci-dessous dans un tableau, sortedEventArray
peuplées mais pas triés. Vais-je à ce propos sur l'complètement mauvais chemin ou suis-je manque juste un petit quelque chose?
NSSortDescriptor *dateDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"startDateTime"
ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor];
NSArray *sortedEventArray = [nodeEventArray sortedArrayUsingDescriptors:sortDescriptors];
source d'informationauteur markdorison
Vous devez vous connecter pour publier un commentaire.
Êtes-vous sûr que le
startDateTime
variables d'instance du nœud événements sont non-nul?Si vous n'avez pas déjà un, vous pouvez ajouter un (personnalisé)
-description
méthode à votre nœud objets événement qui fait quelque chose comme ceci:Puis dans votre tri code journal de la matrice avant et après:
Si le
startDateTime
's sont tousnil
puis l'avant et l'après des tableaux aura le même ordre (depuis l'opération de tri équivalent à l'envoi de tous les-compare:
messages ànil
qui ne fait rien).Avez-vous essayer en spécifiant le
NSDate
comparateur?Par exemple:
Cela devrait appliquer l'utilisation correcte de la comparaison de la
NSDate
classe.Ok, je sais que c'est un peu tard, mais voici comment je ferais:
Évidemment, remplacer Événement avec la classe de votre objet personnalisé. L'avantage de cette approche est que vous êtes protégé contre le refactoring. Si vous étiez à refactoriser et renommer le startDateTime propriété à autre chose, Xcode ne serait probablement pas changer la chaîne que vous êtes en passant le type de descripteur. Soudain, votre tri code de casser/ne rien faire.
Vous pouvez obtenir ce genre,
Vous pouvez le faire comme ceci,