Ako aktualizovať zbierky údajov v iOS aplikáciách?
sobes.tech AI
Odpoveď od AI
Existuje niekoľko spôsobov aktualizácie kolekcií údajov v iOS:
-
reloadData(): Najjednoduchší, ale najmenej výkonný spôsob. Kompletné načítanie všetkých údajov.tableView.reloadData() -
beginUpdates()/endUpdates(): Umožňuje vykonávať dávkové zmeny (vkladanie, odstraňovanie, aktualizácia riadkov/sekcií) s animáciou. Vyžaduje manuálne riadenie indexov.tableView.beginUpdates() tableView.insertRows(at: [IndexPath(row: newData.count - 1, section: 0)], with: .automatic) tableView.endUpdates() -
performBatchUpdates(_:completion:): Modernejšia a preferovaná náhrada zabeginUpdates()/endUpdates(). Taktiež vykonáva dávkové zmeny s animáciou.collectionView.performBatchUpdates({ collectionView.insertItems(at: [IndexPath(item: newData.count - 1, section: 0)]) }, completion: nil) -
diffable data sources: Od iOS 13,UICollectionViewDiffableDataSourceaUITableViewDiffableDataSourceposkytujú deklaratívny spôsob správy údajov. Rozdiely medzi starou a novou verziou údajov sa automaticky vypočítavajú pomocouDiffing.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: Pre prácu s Core Data
NSFetchedResultsControllerautomaticky sleduje zmeny a upozorňuje delegáta na potrebu aktualizácie 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; // ... ďalšie typy NSFetchedObjectChangeType } }
Výber metódy závisí od zložitosti aktualizácie, potreby animácie a použitej architektúry (napríklad Core Data). Diffable data sources sú najviac odporúčaným prístupom pre nové projekty.