Mam prosty NSArray, który ma kilka tablic jako obiektów, które mają pewne daty i ciągi jako obiekty:

  • NSArray (tablica główna) ---------------> widok tabeli
    • NSArray (tablica dodatkowa) ---> komórka widoku tabeli
      • NSDate --------------------> etykieta tekstowa komórki widoku tabeli
      • NSString -------------------> etykieta tekstowa szczegółów komórki widoku tabeli
      • itd.

Używam głównej tablicy dla mojego widoku tabeli -> każda komórka ma swoją własną "tablicę dodatkową". Teraz chcę posortować główną tablicę według obiektu NSDate. Brzmi bardzo prosto, ale nie znalazłem na to rozwiązania w sieci.

Myślałem o użyciu NSSortDesriptors, ale te po prostu sortują tablicę według obiektów w tablicy głównej, a nie w tablicy dodatkowej.

Mam nadzieję, że możesz mi pomóc

EDYCJA: Czy rozwiązałoby to problem, gdybym używał NSDictionary jako tablicy dodatkowej?

0
tharkay 10 sierpień 2011, 06:41

2 odpowiedzi

Najlepsza odpowiedź

Powinieneś być w stanie użyć NSArray sortedArrayUsingComparator, jeśli Twoja aplikacja jest przeznaczona dla systemu iOS 4.0 lub nowszego:

NSArray *sortedArray = [mainArray sortedArrayUsingComparator: ^(id obj1, id obj2) {
    return [[obj1 objectAtIndex:0] compare:[obj2 objectAtIndex:0]];
}];

Zakłada się, że pole daty jest zawsze w indeksie 0 tablicy wewnętrznej. Prawdopodobnie byłoby trochę czystsze, gdybyś użył słownika i wprowadził pole daty według nazwy, ale jeśli nie masz nic przeciwko temu, aby pole daty zawsze pozostawało w indeksie 0, powyższe powinno działać.

4
Tim Dean 10 sierpień 2011, 07:03
Próbowałem twojego kodu w SDK 4.3, ale otrzymuję następujący błąd: "[__NSCFArray Compare:]: nierozpoznany selektor wysłany do instancji"
 – 
tharkay
10 sierpień 2011, 07:08
Zaktualizowałem przykładowy kod zaraz po tym, jak napisałem: Czy jest szansa, że ​​złapałeś poprzednią wersję zamiast zaktualizowanej?
 – 
Tim Dean
10 sierpień 2011, 07:16
Tak, tylko poprzednia wersja kodu spowodowała kod błędu.
 – 
tharkay
10 sierpień 2011, 07:25
Ale to nie zadziała dla mnie ... Myślę, że zmienię tablicę drugorzędną na słownik, który może być dla mnie łatwiejszy
 – 
tharkay
10 sierpień 2011, 07:27

Zakładając, że dobrze zrozumiałem strukturę Twoich danych, powinno być blisko:

NSArray *sortedArray = [mainArray sortedArrayUsingComparator:^(id ary1, id ary2) {
    NSArray *array1 = (NSArray *)ary1;
    NSArray *array2 = (NSArray *)ary2;
    NSDate *date1 = (NSDate *)[array1 objectAtIndex:0];
    NSDate *date2 = (NSDate *)[array2 objectAtIndex:0];
    return [date1 compare:date2];
}];
1
highlycaffeinated 10 sierpień 2011, 07:03