Comment mettre à jour les collections de données dans les applications iOS?
sobes.tech IA
Réponse de l'IA
Il existe plusieurs façons de mettre à jour les collections de données dans iOS :
-
reloadData(): La méthode la plus simple, mais la moins performante. Recharge complètement toutes les données.tableView.reloadData() -
beginUpdates()/endUpdates(): Permet d'effectuer des modifications en lot (insertion, suppression, mise à jour de lignes/séctions) avec animation. Nécessite une gestion manuelle des indices.tableView.beginUpdates() tableView.insertRows(at: [IndexPath(row: newData.count - 1, section: 0)], with: .automatic) tableView.endUpdates() -
performBatchUpdates(_:completion:): Une alternative plus moderne et préférée àbeginUpdates()/endUpdates(). Effectue également des modifications en lot avec animation.collectionView.performBatchUpdates({ collectionView.insertItems(at: [IndexPath(item: newData.count - 1, section: 0)]) }, completion: nil) -
diffable data sources: Depuis iOS 13,UICollectionViewDiffableDataSourceetUITableViewDiffableDataSourceoffrent une gestion déclarative des données. Les différences entre l'ancienne et la nouvelle version des données sont calculées automatiquement viaDiffing.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) -
Contrôleur de résultats récupérés de Core Data : Pour travailler avec Core Data,
NSFetchedResultsControllersuit automatiquement les changements et notifie le délégué pour mettre à jour l'interface utilisateur.// Dans le délégué de 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; // ... autres types de NSFetchedObjectChangeType } }
Le choix de la méthode dépend de la complexité de la mise à jour, de la nécessité d'animation et de l'architecture utilisée (par exemple, Core Data). Diffable data sources est l'approche la plus recommandée pour les nouveaux projets.