Kā atjaunināt datu kolekcijas iOS lietotnēs?
sobes.tech AI
Atbilde no AI
iOS irrādes datu kolekciju atjaunināšanai ir vairāki veidi:
-
reloadData(): Vienkāršākais, bet mazāk efektīvs veids. Pilnībā pārielādē visus datus.tableView.reloadData() -
beginUpdates()/endUpdates(): Atļauj veikt pakotnes izmaiņas (ievietošana, dzēšana, atjaunināšana rindiņās/sekcijās) ar animāciju. Prasa manuālu indeksu pārvaldību.tableView.beginUpdates() tableView.insertRows(at: [IndexPath(row: newData.count - 1, section: 0)], with: .automatic) tableView.endUpdates() -
performBatchUpdates(_:completion:): Mūsdienīgāka un vēlams aizstājējabeginUpdates()/endUpdates(). Tāpat veic pakotnes izmaiņas ar animāciju.collectionView.performBatchUpdates({ collectionView.insertItems(at: [IndexPath(item: newData.count - 1, section: 0)]) }, completion: nil) -
diffable data sources: Sākot ar iOS 13,UICollectionViewDiffableDataSourceunUITableViewDiffableDataSourcenodrošina deklaratīvu datu pārvaldības veidu. Atšķirības starp veco un jauno datu versiju tiek automātiski aprēķinātas arDiffing.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: Darbojas ar Core Data,
NSFetchedResultsControllerautomātiski uzrauga izmaiņas un informē deleģētu par UI atjaunināšanas nepieciešamību.// NSFetchedResultsController deleģētā funkcija - (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; // ... citi NSFetchedObjectChangeType tipi } }
Izvēle ir atkarīga no atjaunināšanas sarežģītības, animācijas nepieciešamības un izmantotās arhitektūras (piemēram, Core Data). Diffable data sources ir ieteicamākais pieejas veids jaunajiem projektiem.