Ответ 1
Сначала в модели данных создайте переходный атрибут (section
). Поскольку он является временным, он физически не хранится и, следовательно, не сохраняется в контексте управляемого объекта.
Атрибут section
показан здесь:
Объект показан здесь:
Подкласс класса NSManagedObject должен иметь вычисленный атрибут "section". Подкласс NSManagedObject
, демонстрирующий, как это сделать, показан здесь:
class Number: NSManagedObject {
@NSManaged var number: NSNumber
var section: String? {
return number.intValue >= 60 ? "Pass" : "Fail"
}
}
Затем вы должны установить sectionForKeyPath
в инициализаторе NSFetchedResultsController в качестве ключа атрибута переходного процесса в модели данных и имени кеша при желании.
override func viewDidLoad() {
super.viewDidLoad()
fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest(), managedObjectContext: managedObjectContext!, sectionNameKeyPath: "section", cacheName: "Root")
fetchedResultsController?.delegate = self
fetchedResultsController?.performFetch(nil)
tableView.reloadData()
}
func fetchRequest() -> NSFetchRequest {
var fetchRequest = NSFetchRequest(entityName: "Number")
let sortDescriptor = NSSortDescriptor(key: "number", ascending: false)
fetchRequest.predicate = nil
fetchRequest.sortDescriptors = [sortDescriptor]
fetchRequest.fetchBatchSize = 20
return fetchRequest
}
В результате получается UITableViewController
с оценками, отсортированными по проходу или сбой динамически:
Я сделал пример проекта, который можно найти на GitHub.