Hogyan frissítjük az adatgyűjteményeket iOS alkalmazásokban?
sobes.tech MI
Válasz az MI-től
Az iOS adatgyűjtemények frissítésének több módja is létezik:
-
reloadData(): A legegyszerűbb, de legkevésbé hatékony módszer. Teljesen újratölti az összes adatot.tableView.reloadData() -
beginUpdates()/endUpdates(): Lehetővé teszi csomagolt módosítások végrehajtását (beszúrás, törlés, frissítés sorokban/fejezetekben) animációval. Kézi indexkezelést igényel.tableView.beginUpdates() tableView.insertRows(at: [IndexPath(row: newData.count - 1, section: 0)], with: .automatic) tableView.endUpdates() -
performBatchUpdates(_:completion:): Egy modernebb és preferált módszer abeginUpdates()/endUpdates()helyett. Szintén csomagolt módosításokat hajt végre animációval.collectionView.performBatchUpdates({ collectionView.insertItems(at: [IndexPath(item: newData.count - 1, section: 0)]) }, completion: nil) -
diffable data sources: Az iOS 13-tól kezdődően aUICollectionViewDiffableDataSourceésUITableViewDiffableDataSourcedeklaratív módon kezelik az adatokat. A régi és az új adatszintek közötti különbségek automatikusan kiszámításra kerülnek aDiffingsegítségével.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 eredményeinek vezérlője: A Core Data-val való munkához az
NSFetchedResultsControllerautomatikusan figyeli a változásokat, és értesíti a delegáltat a UI frissítésének szükségességéről.// Az NSFetchedResultsController delegáltjában - (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; // ... más NSFetchedObjectChangeType típusok } }
A módszer kiválasztása a frissítés összetettségétől, az animáció szükségességétől és a használt architektúrától függ (pl. Core Data). A Diffable data sources a legajánlottabb megközelítés új projektekhez.