Swift Core Data - ключ записи обновления, который используется в NSSortDescriptor, выдает ошибку
Я использую основные данные в моем приложении, и я добавляю NSFetchedResultsControllerDelegate в UITableViewController. Почти все работает нормально, за исключением того, что если я обновлю ключ "serverName" в записи, произойдет сбой приложения. Я использую этот ключ в моем NSSortDescriptor. Если я попытаюсь обновить какой-либо ключ, который используется NSSortDescriptor, приложение вылетит. Объявление NSFetchedResultsController является
lazy var fetchedResultsController: NSFetchedResultsController = {
let fetchRequest = NSFetchRequest(entityName: "Hosts2")
let sortDescriptor = NSSortDescriptor(key: "serverName", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.moc, sectionNameKeyPath: nil, cacheName: nil)
fetchedResultsController.delegate = self
return fetchedResultsController
}()
Если я обновлю ключ, который использует NSSortDescription. В случае перемещения он запустится, а затем произойдет сбой приложения.
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
let section = 2
print("controller update \(indexPath) \(type) \n\(newIndexPath)")
switch (type) {
case .Insert:
if let indexPath = newIndexPath {
print("it will add new server")
let myIndex = NSIndexPath(forRow: indexPath.row, inSection: section)
tableView.insertRowsAtIndexPaths([myIndex], withRowAnimation: .Fade)
}
break;
case .Delete:
if let indexPath = indexPath {
print("it will delete the record")
let myIndex = NSIndexPath(forRow: indexPath.row, inSection: section)
self.tableView.deleteRowsAtIndexPaths([myIndex], withRowAnimation: .Fade)
}
break;
case .Update:
if let indexPath = indexPath {
print("update in core data")
let myIndex = NSIndexPath(forRow: indexPath.row, inSection: section)
let cell = tableView.cellForRowAtIndexPath(myIndex) as! SetupShowHostsCell3TableViewCell
configureCell(cell, atIndexPath: indexPath)
}
break;
case .Move:
print("did move")
if let indexPath = indexPath {
let myIndex = NSIndexPath(forRow: indexPath.row, inSection: section)
tableView.deleteRowsAtIndexPaths([myIndex], withRowAnimation: .Fade)
}
if let newIndexPath = newIndexPath {
let myIndex = NSIndexPath(forRow: newIndexPath.row, inSection: section)
tableView.insertRowsAtIndexPaths([myIndex], withRowAnimation: .Fade)
}
break;
}
}
Я могу обновить любой другой ключ в любой записи. Я не публикую здесь полный код, потому что он большой, но я могу это сделать, если вы, ребята, спросите. Заранее спасибо.