tableView
に既に保存されているデータを表示するのにNSFetchedResultsController
を使用しています。同時に、私は新しいデータをWebサービスでチェックしています。ネットワークからデータを受信すると、データベースは新しいデータで更新されます。 tableView
は自動的に更新されます。 tableView
の更新がスムーズではありません。 swift 4
に適したソリューションをご提供ください。 私はより良い説明のためにアップロードしたこのビデオをご覧ください。 https://www.youtube.com/watch?v=XhSEykQcP5A&feature=youtu.beUITableViewのデータ更新がスムーズでない
これは、あなたがこの試すことができます私のNSFetchedResultsController
デリゲートの実装
extension CoreDataTableViewController: NSFetchedResultsControllerDelegate {
func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
tableView.beginUpdates()
}
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange sectionInfo: NSFetchedResultsSectionInfo, atSectionIndex sectionIndex: Int, for type: NSFetchedResultsChangeType) {
let set = IndexSet(integer: sectionIndex)
switch (type) {
case .insert:
tableView.insertSections(set, with: .fade)
case .delete:
tableView.deleteSections(set, with: .fade)
default:
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.deleteRows(at: [indexPath!], with: .fade)
tableView.insertRows(at: [newIndexPath!], with: .fade)
}
}
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
tableView.endUpdates()
}
私たちに 'NSFetchedResultsController'デリゲート実装 –
NSFetchedResultsControllerデリゲート実装を示す質問を編集しました。 reloadData()をどこでも呼び出すわけではありません。 –