2011-01-30 11 views
7

Alfabetik sıraya göre sıralanan kişileri gösteren ve bölümlere bölen bir tablo görünümü var.NSSortDescriptor - listenin sonuna # ve # it düğmesine basın - iphone xcode

i kullanıyorum -

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

sonra ben bu yüzden hepsini bir grupta gruplandırılacaktır ilk harfi olarak # işaretini kullanıyorum isim olmadan kişiler için kullanılamaz.

her şey harika. İstediğim tek şey, # bölümünü şu anın başında gösterdiği gibi masanın sonuna kadar itmek.

herhangi bir fikir? artan: karşılaştırıcı: yöntem peşin

shani

cevap

7

Bunu yapmanın en iyi yolu içinde

sayesinde sortDescriptorWithKey kullanarak kendi özel sıralama tanımlayıcısı oluşturmaktır. Bu, bir blok kullanarak belirttiğiniz kendi karşılaştırma fonksiyonunuzu oluşturmanızı sağlar.

İlk önce, bir karşılaştırma işlevi oluşturun. Daha önce hiç programmed with blocks değilseniz, şimdi öğrenme zamanı! Şimdi

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]; 
    } 
}; 

Eğer karşılaştırma işlevi olduğuna göre, bir tür tanımlayıcısı yaratmak için kullanabilirsiniz:

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

Artık tıpkı başka herhangi bir benzeri bu tür tanımlayıcısı kullanabilir ve sizin listeniz yeni # öğeleri sonuna kadar sıralayın!

+0

NSComparisonResult (^ myStringComparison) nedir (id obj1, id obj2) =^NSComparisonResult (id obj1, id obj2) {...}; '? Nasıl çalıştığını anlıyorum, ama hangi dil yapısı bu? Bu sadece bir fonksiyon mu? –

+0

Normal bir işleve benzeyen bir blok nesnesi. [Daha fazla bilgiyi Apple belgelerinde okuyabilirsiniz] (http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html). – sgress454

+0

Benden de teşekkürler. –