2012-03-24 19 views
2

Ich versuche ein Array zu sortieren, gefüllt mit Objekten aus einer Klasse, die ich geschrieben habe. Die Klasse, die ich geschrieben habe, enthält einen NSString selbst als den "Namen". Also, was ich tun möchte, ist das Array zu sortieren, basierend auf der Namen-Eigenschaft, die die Objekte enthalten. Ich versuchte, das einfach:Array mit benutzerdefinierten Objekten sortieren

[anArray sortedArrayUsingSelecter: CaseInsensitiveCompare]; 

Aber wie Sie sich vorstellen können, es sendet die caseInsensitiveCompare Nachricht an die Objekte selbst, und es wird nicht zu, dass man reagieren.

Also ich rate ich muss meine Objekte in der Lage sein, auf die caseInsensitiveCompare reagieren? Nicht ganz sicher, wie man eine solche Methode schreibt, also wären alle Zeiger schön.

Dank

+0

Check out http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it –

Antwort

10

Sie die Methode verwenden können sortedArrayUsingComparator:

NSArray *sortedArray = [anArray sortedArrayUsingComparator:^(MyClass *a, MyClass *b) { 
    return [a.name caseInsensitiveCompare:b.name]; 
}]; 
+0

Das hat super funktioniert, danke Chap. Was genau macht das? oder muss ich mir keine Sorgen machen? Es ist eine Blockade als Argument, oder? – Seerex

+0

Ja, es verwendet einen Block, um das Array zu sortieren. – sch

1

Sie können sortedArrayUsingComparator:(NSComparator)cmptr (NSArray reference), um das Array zu sortieren. Zum Beispiel, wenn Sie von der name Eigenschaft sortieren wollen, gehen Sie wie folgt (unter der Annahme Ihrer Klasse Person genannt):

NSArray *sortedArray = [anArray sortedArrayUsingComparator:^(id a, id b) { 
    NSString *first = [(Person *)a name]; 
    NSString *second = [(Person *)b name]; 
    return [first caseInsensitiveCompare:second]; 
}]; 
Verwandte Themen