[英]Code works well on macOS and doesn't work on iOS (SwiftUI)
下面的代码在 macOS(至少是 Catalina 10.15.3)上运行良好,但相同的代码(只是复制粘贴)在 iOS Simulator (13.2.2/13.3) 和 Xcode 11.3.1 预览版(应用程序崩溃)上不起作用。 有人可以解释一下,我做错了什么吗?
问题在这里: .onAppear(perform: self.initView)
(关于更新users
属性),但我不知道,出了什么问题。
struct User: Identifiable {
let id = UUID()
let name: String
}
struct ContentView: View {
@State var users = [User]()
var body: some View {
List(users, id: \.id) { user in
Text(user.name)
}.onAppear(perform: self.initView)
}
func initView() {
self.users = [User(name: "test")]
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
这是生成的崩溃日志中非常有用的部分:
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:节数无效。 更新后表视图中包含的节数(1)必须等于更新前表视图中包含的节数(1),加上或减去插入或删除的节数(1插入,0已删除)。”
所以这意味着表数据的更新存在一些偏差(即,实际上,在重新加载数据期间),在这种情况下,根据经验,有理由推迟执行的操作......而且,它也适用于这种情况。
这是一个有效的修复(或解决方法,无论如何)。 使用 Xcode 11.3 / iOS 13.3 测试
func initView() {
DispatchQueue.main.async { // postponed update till next event cycle
self.users = [User(name: "test")]
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.