2009-08-28 22 views
12

Jestem nowy w Apple iPhone SDK wsparcie dla Core Data i jestem stosunkowo nowy w rozwoju iPhone. Moje pytanie dotyczy nieco bardziej "złożonego" sortowania, niż jest to opisane w dokumentach. Podejrzewam, że robię nieprawidłowe, fundamentalne założenie.Jak sortować obiekt NSMutableArray obiektów zarządzanych za pomocą wykresu obiektów

Jak posortować wstępnie pobraną kolekcję zarządzanych obiektów według właściwości znajdującej się kilka warstw głębiej w kolekcji?

przykład: rolnicze ma jeden do wielu Cowboy (Farm.cowboys) Kowboj ma od 1 do 1 do osoby (Cowboy.person) Osoba ma lastName (Person.lastName)

cały przedmiot wykres został pobrany i kowboje są wyświetlane przez UITableView. Teraz, jak sortować Cowboys według lastName? Czy muszę ponownie je pobrać? a jeśli tak, jak to zrobić z sortowaniem zagnieżdżonym?

Obecnie próbuję sortować NSMutableArray kowbojów ([Farm.cowboys allobjects]), co jest dobre dla tych nieruchomości na Cowboy. Ale nie jestem pewien, jak to zrobić przy sortowaniu kolekcji Cowboys przez Cowboy.person.lastName?

Odpowiedz

0

Mam nadzieję, że ktoś ma lepsze rozwiązanie. Jednak ...

Obiekt opakowania z selektorem porównania i odniesieniem do obiektu sortowania działa. Nie jest tak czysty, jak bym chciał, więc mam nadzieję, że ktoś inny zaproponuje alternatywę.

W istocie CowboyWrapper ma właściwość kowbojską. CowboyWrapper ma również selektor porównania. Budując i utrzymując synchronizację NSMutableArray of CowboyWrappers, sortuj utwory.

21

Jeśli możesz celować w 10.6, możesz to zrobić, używając bloków. Tak:

- (NSArray *)sortedArray { 
    return [originalArray sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2){ 
    NSString *lastName1 = [[obj1 person] lastName]; 
    NSString *lastName2 = [[obj2 person] lastName]; 
    return [lastName1 caseInsensitiveCompare:lastName2]; }]; 
} 
+2

Warto również zauważyć, jeśli używasz 'NSMutableArray', można po prostu użyć' sortUsingComparator: 'zamiast, jeśli chcieliby . –

+0

Powinieneś usunąć rzutowanie do NSComparator. – Psycho

5

można sortować tak:

[myUnsortedArrayOfCowboys sortedArrayUsingDescriptors: 
    [NSArray arrayWithObject: 
     [NSSortDescriptor 
      sortDescriptorWithKey:"person.lastName" 
      ascending:YES]]]; 

zauważy '' w kluczu deskryptora sortowania. W ten sposób przechodzisz przez wykres obiektów.

1

Jeśli chcesz sortować liczby i ciąg następnie użyć tego

NSArray *unsortedArray = [NSArray arrayWithObjects:@"Hello", @"4", @"Hi", @"5", @"2", @"10", @"1", nil]; 
NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^(id firstObject, id secondObject) { 
    return [((NSString *)firstObject) compare:((NSString *)secondObject) options:NSNumericSearch]; 
}]; 
Powiązane problemy