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.
- NSArray (tablica dodatkowa) ---> komórka widoku tabeli
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?
2 odpowiedzi
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ć.
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];
}];
Podobne pytania
Nowe pytania
iphone
NIE używaj tego znacznika, chyba że adresujesz konkretnie iPhone'a i / lub iPoda touch firmy Apple. W przypadku pytań niezależnych od sprzętu użyj tagu [ios]. Więcej tagów do rozważenia to [xcode] (ale tylko jeśli pytanie dotyczy samego IDE), [swift], [objective-c] lub [cocoa-touch] (ale nie [cocoa]). Proszę powstrzymać się od pytań dotyczących iTunes App Store lub iTunes Connect. Jeśli używasz języka C #, oznacz tagiem [mono].