You can also read this article in my
Xcoding With Alfian blog website using the link below.
Using Diffable Data Source iOS 13 API in UITableView | Xcoding with Alfian | Swift, iOS, Flutter…
Diffable Data Source API helps us to manage data sources both in TableView and CollectionView by using snapshot…
Since the beginning of iOS SDK,
UITableViewDataSource is the protocol that had the responsibility to drive the data and provide the cells in
TableView. As good developers, we need to implement the protocol methods and making sure to sync our backing model with the data source properly to avoid any crashes because of inconsistencies between them.
optional func numberOfSections(in tableView: UITableView) -> Int
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
Also, when we need to perform granular updates for sections and rows in our
TableView, we need to use the API like the sample code below.
// Delete section 3 and 4
tableView.reloadSections([3,4], with: .automatic)
// Insert at section 1 and row 0
tableView.insertRows(at: [IndexPath(row: 0, section: 1)], with: .automatic)
// delete at section 1 and row 1
tableView.deleteRows(at: [IndexPath(row: 1, section: 1)], with: .automatic)
It’s actually pretty hard to make sure all the section and rows are correctly updated for each insert, reload, and deletion based on the value between the old and new data. This is the error that UIKit threw when we incorrectly update the
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of sections. The number of sections contained in the table view after the update (10) must be equal to the number of sections contained in the table view before the update (10), plus or minus the number of sections inserted or deleted (0 inserted, 1 deleted).'
Just in time for WWDC 2019, Apple introduced a new API for managing data source for
UICollectionView in a much more simpler and safer way…