Como atualizar as coleções de dados em aplicações iOS?
sobes.tech IA
Resposta da IA
Existem várias formas de atualizar coleções de dados no iOS:
-
reloadData(): A forma mais simples, mas menos eficiente. Recarrega todos os dados completamente.tableView.reloadData() -
beginUpdates()/endUpdates(): Permite fazer alterações em lote (inserções, eliminações, atualizações de linhas/seções) com animação. Requer gestão manual dos índices.tableView.beginUpdates() tableView.insertRows(at: [IndexPath(row: newData.count - 1, section: 0)], with: .automatic) tableView.endUpdates() -
performBatchUpdates(_:completion:): Uma alternativa mais moderna e preferida abeginUpdates()/endUpdates(). Também realiza alterações em lote com animação.collectionView.performBatchUpdates({ collectionView.insertItems(at: [IndexPath(item: newData.count - 1, section: 0)]) }, completion: nil) -
diffable data sources: Desde o iOS 13,UICollectionViewDiffableDataSourceeUITableViewDiffableDataSourceoferecem uma forma declarativa de gerir dados. As diferenças entre a versão antiga e a nova dos dados são calculadas automaticamente usandoDiffing.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) -
Controlador de resultados recuperados do Core Data: Para trabalhar com Core Data,
NSFetchedResultsControllerrastreia automaticamente as mudanças e notifica o delegado para atualizar a interface de utilizador.// No delegado do 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; // ... outros tipos de NSFetchedObjectChangeType } }
A escolha do método depende da complexidade da atualização, da necessidade de animação e da arquitetura utilizada (por exemplo, Core Data). Diffable data sources são a abordagem mais recomendada para novos projetos.