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


    }

Я могу обновить любой другой ключ в любой записи. Я не публикую здесь полный код, потому что он большой, но я могу это сделать, если вы, ребята, спросите. Заранее спасибо.

0 ответов

Другие вопросы по тегам