2011-01-30 9 views
7

Mam widok tabeli, który pokazuje kontakty posortowane według alfabetycznej kolejności i podzielić je na sekcje.NSSortDescriptor - push # i numery na końcu listy - iphone xcode

używam -

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:[dataSource keyName] ascending:YES]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

następnie kontaktów bez nazwy używam znak # jako pierwszej litery więc wszystkie z nich zostaną zgrupowane w jednej grupie.

wszystko jest świetnie. jedyne, czego chcę, to przesunięcie sekcji # na koniec stołu, jak na razie to pokazuje na samym początku.

jakieś pomysły?

góry dzięki

Shani

Odpowiedz

7

Najlepszym sposobem, aby to zrobić, aby stworzyć swój własny deskryptor zwyczaj sortowania pomocą sortDescriptorWithKey: rosnące: komparator: metody. Pozwala to utworzyć własną funkcję porównania, którą określa się za pomocą bloku.

Najpierw utwórz funkcję porównania. Jeśli nigdy wcześniej nie byłeś programmed with blocks, teraz jest czas na naukę!

NSComparisonResult (^myStringComparison)(id obj1, id obj2) = ^NSComparisonResult(id obj1, id obj2) { 

    // Get the first character of the strings you're comparing 
    char obj1FirstChar = [obj1 characterAtIndex:0]; 
    char obj2FirstChar = [obj2 characterAtIndex:0]; 

    // Check if one (but not both) strings starts with a '#', and if so, make sure that one is sorted below the other 
    if (obj1FirstChar == '#' && obj2FirstChar != '#') { 
     return NSOrderedDescending; 
    } else if (obj2FirstChar == '#' && obj1FirstChar != '#') { 
     return NSOrderedAscending; 
    } 
    // Otherwise return the default sorting order 
    else { 
     return [obj1 compare:obj2 options:0]; 
    } 
}; 

Teraz, że masz funkcję porównawczą, można go używać do tworzenia deskryptor sortowania:

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:[dataSource keyName] ascending:YES comparator:myStringComparison]; 

można teraz używać tego deskryptora sortowania podobnie jak każdy inny, a lista będzie posortuj # elementy do końca!

+0

Co to jest "NSComparisonResult (^ myStringComparison) (id obj1, id obj2) =^NSComparisonResult (id obj1, id obj2) {...};'? Rozumiem, jak to działa, ale jaki to konstruuje język? Czy to tylko funkcja? –

+0

Jest to obiekt blokowy, który jest podobny do zwykłej funkcji. Możesz [przeczytaj więcej o nich w dokumentach Apple] (http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html). – sgress454

+0

Dziękuję także ode mnie. –

Powiązane problemy