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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es, dass man einfach zu viele []?
sollte einfach sein: