Jak aktualizovat datové kolekce v iOS aplikacích?
sobes.tech AI
Odpověď od AI
Existuje několik způsobů aktualizace kolekcí dat v iOS:
-
reloadData(): Nejjednodušší, ale nejméně výkonný způsob. Kompletně načte všechna data.tableView.reloadData() -
beginUpdates()/endUpdates(): Umožňuje provádět dávkové změny (vkládání, odstraňování, aktualizace řádků/sekcí) s animací. Vyžaduje ruční správu indexů.tableView.beginUpdates() tableView.insertRows(at: [IndexPath(row: newData.count - 1, section: 0)], with: .automatic) tableView.endUpdates() -
performBatchUpdates(_:completion:): Modernější a preferovaná náhrada zabeginUpdates()/endUpdates(). Také provádí dávkové změny s animací.collectionView.performBatchUpdates({ collectionView.insertItems(at: [IndexPath(item: newData.count - 1, section: 0)]) }, completion: nil) -
diffable data sources: Od iOS 13,UICollectionViewDiffableDataSourceaUITableViewDiffableDataSourceposkytují deklarativní způsob správy dat. Rozdíly mezi starou a novou verzí dat jsou automaticky vypočítávány pomocíDiffing.struct MySection: Hashable { let id = UUID() } struct MyItem: Hashable { let id = UUID() let title: String } var dataSource: UICollectionViewDiffableDataSource<MySection, MyItem>! // ... var snapshot = NSDiffableDataSourceSnapshot<MySection, MyItem>() snapshot.appendSections([MySection()]) snapshot.appendItems([MyItem(title: "New Item")]) dataSource.apply(snapshot, animated: true) -
Core Data fetched results controller: Pro práci s Core Data
NSFetchedResultsControllerautomaticky sleduje změny a upozorňuje delegáta na potřebu aktualizace UI.// V delegátovi NSFetchedResultsController - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedObjectChangeType)type newIndexPath:(NSIndexPath *)newIndexPath { switch(type) { case NSFetchedResultsChangeInsert: [self.tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade]; break; // ... další typy NSFetchedObjectChangeType } }
Výběr metody závisí na složitosti aktualizace, potřebě animace a použité architektuře (například Core Data). Diffable data sources jsou nejvíce doporučeným přístupem pro nové projekty.