5

adresinden, NSFetchedResultsController Konum varlıklarını döndürerek besliyorum. Varsayılan sıralama (ve bölüm başlıkları), varlığın adının ilk harfidir. Bu (yine de, büyük ve küçük harfleri aynı bölüme doğru şekilde birleştirmeye çalışıyorum da) çalışır. Kullanıcı, tabloyu üç isteğe bağlı kategoriden (öğenin öznitelikleri) biri tarafından sipariş etmeyi seçebilir ve sonra bu kategoriler sıralanır. varlık adına göre. Ben kategoriye göre sıralama ayarlandığındaNSFetchedResultsController - Swift ile sıralayıcıları sırala -

aşağıdaki çalışma zamanı hatası olsun: Bu benim NSFetchedResultsController

[_TtCSs23_ContiguousArrayStorage00007F80513B59D0 key]: unrecognized selector sent to instance 0x7f80513b5720 

: Ben eminim

var sectionNameKeyPathString1: String? 
var sectionNameKeyPathString2: String? 

var fetchedResultsController: NSFetchedResultsController { 
    if _fetchedResultsController != nil { 
     return _fetchedResultsController! 
    } 

    let fetchRequest = NSFetchRequest() 
    // Edit the entity name as appropriate. 
    let entity = NSEntityDescription.entityForName("Location", inManagedObjectContext: self.managedObjectContext!) 
    fetchRequest.entity = entity 

    // Set the batch size to a suitable number. 
    fetchRequest.fetchBatchSize = 20 

    // Edit the sort key as appropriate. 
    if sectionNameKeyPathString1 != nil { 
     let sortDescriptor1 = NSSortDescriptor(key: sectionNameKeyPathString1!, ascending: true) 
     let sortDescriptor2 = NSSortDescriptor(key: sectionNameKeyPathString2!, ascending: true) 
     let sortDescriptors = [sortDescriptor1, sortDescriptor2] 
     fetchRequest.sortDescriptors = [sortDescriptors] 
    } else { 
     let sortDescriptor = NSSortDescriptor(key: "locationName", ascending: true) 
     fetchRequest.sortDescriptors = [sortDescriptor] 
    } 

    var sectionNameKeyPath: String 
    if sectionNameKeyPathString1 == nil { 
     sectionNameKeyPath = "firstLetterAsCap" 
    } else { 
     sectionNameKeyPath = sectionNameKeyPathString1! 
    } 

    // Edit the section name key path and cache name if appropriate. 
    // nil for section name key path means "no sections". 
    let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: sectionNameKeyPath, cacheName: "Locations") 
    aFetchedResultsController.delegate = self 
    _fetchedResultsController = aFetchedResultsController 

    var error: NSError? = nil 
    if !_fetchedResultsController!.performFetch(&error) { 
     // TODO: Handle this error 
     // Replace this implementation with code to handle the error appropriately. 
     // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
     //println("Unresolved error \(error), \(error.userInfo)") 
     abort() 
    } 

    return _fetchedResultsController! 
} 

kullanma kırılma noktaları, bu örneğin, sectionNameKeyPathString1 = " kategori1 "ve sectionNameKeyPathString2 =" locationName "ve ayrıca bu sectionNameKeyPath =" category1 ", böylece anahtar yolu birinci sıralama tanımlayıcısıyla eşleşir.

Obj-C'de çalışıyordum ama şimdi saçlarımı çektim ve eminim ki körlükten muzdaripim.

cevap

10

Sadece çok fazla var mı []?

let sortDescriptors = [sortDescriptor1, sortDescriptor2] // <- an [NSSortDescriptor] 
    fetchRequest.sortDescriptors = [sortDescriptors] // <- now an [[NSSortDescriptor]] 

sadece olmalıdır: Ben hala düzenlerken iken Soruma cevap

fetchRequest.sortDescriptors = [sortDescriptor1, sortDescriptor2] 
+0

. Teşekkür ederim! Zaman sınırı dolduğunda cevabınızı kabul edeceğim. Çok mutlu insanlar bana bakıyorlar. – Magnas

+0

Bu çok garip, aynısı bana da oldu! Kazaya göre kare şeklinde köşeli ayraçlı olmalı ve dizinin başlatıcısı içindeki tanımlayıcıları başlatmamdan ve ObjC'den köşeli parantez içinde bu gibi yöntemleri kullanmam için çok kullanıldığından dolayı fark edilmemelidir. – Ash