Vous savez que sortedArrayUsingDescriptors:
renvoie un nouveau tableau (trié), correct? Si vous souhaitez trier le tableau sur place, vous devez vous assurer que personArray
est un NSMutableArray
et utiliser sa méthode sortUsingDescriptors:
.
modifier
Peut-être prendre un regard sur les deux méthodes seront plus bénéfiques:
-[NSArray sortedArrayUsingDescriptors:];
-[NSMutableArray sortUsingDescriptors:];
Le premier commence par un adjectif et un nom. L'adjectif décrit le nom. Le nom indique que c'est la valeur de retour. Puisque le nom est "tableau", il serait logique que la valeur de retour de la méthode soit NSArray
. Puisque l'adjectif est "trié", on peut donc supposer que le tableau retourné sera dans un ordre quelconque (l'ordre étant spécifié par "l'utilisation" des "descripteurs").
La seconde commence par un verbe. Puisqu'un verbe est un mot d'action, nous pouvons en déduire qu'il s'agit en fait d'une méthode comportementale qui va modifier le récepteur lui-même. Puisque le verbe est "trier", nous pouvons donc supposer que le récepteur sera dans un ordre quelconque après la fin de la méthode.
Autres "paires de méthode" qui suivent ce modèle:
-[NSString stringByAppendingString:]
et -[NSMutableString appendString:]
-[NSArray filteredArrayUsingPredicate:]
et -[NSMutableArray filterUsingPredicate:]
-[NSCharacterSet invertedSet]
et -[NSMutableCharacterSet invert]
- ... et bien d'autres
Puisque vous êtes chantez la première méthode (sortedArrayUsingDescriptors:
), vous devez récupérer la valeur de retour de la méthode; sinon tu fais tout ce travail pour rien. Si vous voulez trier le tableau « en place » (c.-à modifier directement le récepteur et ne être donné une nouvelle NSArray
), puis personArray
doit être un NSMutableArray
, et vous devez utiliser la méthode sortUsingDescriptors:
.
Je sais qu'une réponse a déjà été postée et qu'elle est probablement correcte, mais comme un mot d'ordre général: "ça ne marche pas" n'est pas très utile. Vous devez dire ce qui est exactement brisé. Par exemple "personArray reste unsorted" aurait une réponse totalement différente à "obtenir l'exception NSCFString ne répond pas à -sortedArrayUsingDescriptors". – JeremyP