gpt4 book ai didi

uikit - UITableViewDiffableDataSource 无效部分

转载 作者:行者123 更新时间:2023-12-04 00:58:01 25 4
gpt4 key购买 nike

我尝试使用 UITableViewDiffableDataSource

class SecondViewController: UIViewController {

enum Section {
case main
}

struct Model: Hashable {
let title: String
}

var tableView: UITableView!
var dataSource: UITableViewDiffableDataSource<Section, Model>!

override func viewDidLoad() {
super.viewDidLoad()

tableView = UITableView(frame: view.bounds)
view.addSubview(tableView)
tableView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")

view.layoutIfNeeded()

dataSource = UITableViewDiffableDataSource<Section, Model>(tableView: tableView, cellProvider: { (tableView, indexPath, item) -> UITableViewCell? in
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = item.title
return cell
})

var snapshot = NSDiffableDataSourceSnapshot<Section, Model>()
snapshot.appendSections([.main])
snapshot.appendItems([Model(title: "1")], toSection: .main)
dataSource.apply(snapshot)
}
}

如果我使用 view.layoutIfNeeded()创建前 dataSource ,它会崩溃:

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 (1) must be equal to the number of sections contained in the table view before the update (1), plus or minus the number of sections inserted or deleted (1 inserted, 0 deleted).'

最佳答案

我在填充 UITableView 时遇到了同样的问题结果来自 PassthroughSubject ,尽快UIViewController被显示。
动画更新对我来说非常重要,所以我的解决方法是首先“准备”DiffableDataSource通过在初始化后立即创建快照,附加我想要的部分,使用空数组附加项目,并使用 animatingDifferences: false 应用快照.
之后,我能够毫无问题地应用带有数据的动画快照。

关于uikit - UITableViewDiffableDataSource 无效部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60789365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com