Kuidas uuendada andmekogusid iOS rakendustes?
sobes.tech AI
Vastus AI-lt
iOS-is andmete kogumite uuendamiseks on mitu viisi:
-
reloadData(): Kõige lihtsam, kuid vähem tõhus viis. Laadib kogu andmed uuesti.tableView.reloadData() -
beginUpdates()/endUpdates(): Annab võimaluse teha partii muudatusi (lisamine, kustutamine, ridade/sektsioonide uuendamine) animatsiooniga. Nõuab käsitsi indeksite haldamist.tableView.beginUpdates() tableView.insertRows(at: [IndexPath(row: newData.count - 1, section: 0)], with: .automatic) tableView.endUpdates() -
performBatchUpdates(_:completion:): Kaasaegsem ja eelistatum asendusbeginUpdates()/endUpdates(). Samuti teeb partii muudatusi animatsiooniga.collectionView.performBatchUpdates({ collectionView.insertItems(at: [IndexPath(item: newData.count - 1, section: 0)]) }, completion: nil) -
diffable data sources: Alates iOS 13-st pakuvadUICollectionViewDiffableDataSourcejaUITableViewDiffableDataSource deklaratiivset andmete haldamise viisi. Erinevused vana ja uue andmeversiooni vahel arvutatakse automaatseltDiffing` abil.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: Core Data-ga töötades jälgib
NSFetchedResultsControllerautomaatselt muudatusi ja teavitab delegaati UI uuendamise vajadusest.// NSFetchedResultsController delegaadi meetod - (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; // ... teised NSFetchedObjectChangeType tüübid } }
Valik sõltub uuendamise keerukusest, animatsiooni vajadusest ja kasutatavast arhitektuurist (näiteks Core Data). Diffable data sources on soovitatav lähenemine uutele projektidele.