Обновление tableView - без refre sh полностью - PullRequest
0 голосов
/ 13 февраля 2020

Я создал таблицу «tableView» (данные из CoreData - NSManagedObject). Я хочу обновить данные в таблицах, когда новое уведомление приходит от NSNotification без полного обновления таблицы. Как это сделать?

Спасибо за помощь!

1 Ответ

2 голосов
/ 13 февраля 2020

Если вы хотите поддержать табличное представление с результатами автообновления из CoreData, тогда лучше всего использовать NSFetchedResultsController. У Apple есть пример кода о том, как это сделать здесь .

Сортировка версии заключается в реализации методов делегирования для willChangeContent и didChangeContent и пересылки соответствующих изменений (ie вставка, удаление и перезагрузка row) в tableView, и это будет синхронизировать ваш просмотр таблицы с вашей базой данных.

func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
    tableView.beginUpdates()
}

func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange sectionInfo: NSFetchedResultsSectionInfo, atSectionIndex sectionIndex: Int, for type: NSFetchedResultsChangeType) {
    switch type {
    case .insert:
        tableView.insertSections(IndexSet(integer: sectionIndex), with: .fade)
    case .delete:
        tableView.deleteSections(IndexSet(integer: sectionIndex), with: .fade)
    case .move:
        break
    case .update:
        break
    }
}

func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) {
    switch type {
    case .insert:
        tableView.insertRows(at: [newIndexPath!], with: .fade)
    case .delete:
        tableView.deleteRows(at: [indexPath!], with: .fade)
    case .update:
        tableView.reloadRows(at: [indexPath!], with: .fade)
    case .move:
        tableView.moveRow(at: indexPath!, to: newIndexPath!)
    }
}

func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
    tableView.endUpdates()
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...