Sortieren Deskriptoren mit NSFetchedResultsController - Swift

Ich habe eine UITableView fed von Core Data mit einem NSFetchedResultsController Rücksendung der Lage Personen. Die Standard-Sortierung (und Abschnittsüberschriften) ist über den ersten Buchstaben des namens der Entität. Das funktioniert (wenn auch ich bin immer noch versuchen, kombinieren Sie groß-und Kleinschreibung in der gleichen Sektion richtig.) Der Benutzer kann wählen, um die Tabelle durch eine von drei optionalen Kategorien (die Attribute der Entität) und dann diese Kategorien sind sortiert nach name der Entität.

Wenn ich die Sortierung nach Kategorie, bekomme ich folgenden Laufzeitfehler:

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

Dies ist mein NSFetchedResultsController:

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!
}

Mithilfe von Haltepunkten ich bin zuversichtlich, dass, zum Beispiel, sectionNameKeyPathString1 = "category1" und sectionNameKeyPathString2 = "locationName" und auch, dass sectionNameKeyPath = "category1", so der Pfad der Schlüssel entspricht der ersten Art Deskriptor.

Hatte ich diese Arbeit in Obj-C, aber jetzt bin ich mein Haar ziehen und sicher, ich bin leiden bug-Blindheit.

InformationsquelleAutor Magnas | 2014-09-05
Schreibe einen Kommentar