Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
代码在macOS上运行良好,不会';无法在iOS(SwiftUI)上工作_Ios_Macos_Swiftui - Fatal编程技术网

代码在macOS上运行良好,不会';无法在iOS(SwiftUI)上工作

代码在macOS上运行良好,不会';无法在iOS(SwiftUI)上工作,ios,macos,swiftui,Ios,Macos,Swiftui,下面的代码在macOS上运行良好(至少Catalina 10.15.3),但同样的代码(只是复制粘贴)在iOS模拟器(13.2.2/13.3)和Xcode 11.3.1预览版(应用程序只是崩溃)上不起作用。有人能解释一下我做错了什么吗 问题就在这里:.onAppear(perform:self.initView)(在更新用户属性时),但我不知道出了什么问题 struct User: Identifiable { let id = UUID() let name: String }

下面的代码在macOS上运行良好(至少Catalina 10.15.3),但同样的代码(只是复制粘贴)在iOS模拟器(13.2.2/13.3)和Xcode 11.3.1预览版(应用程序只是崩溃)上不起作用。有人能解释一下我做错了什么吗

问题就在这里:
.onAppear(perform:self.initView)
(在更新
用户
属性时),但我不知道出了什么问题

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")]
    }
}

使用Xcode 11.2/iOS 13.2没有崩溃在模拟器上使用Xcode 11.3/iOS 13.3确认崩溃(在预览中没有崩溃),感谢您的帮助和清晰的解释。但我想知道,为什么我上面的代码可以在macOS上运行而不延迟…剩下的唯一问题是,当代码更改时预览不会更新(Xcode 11.3.1/iOS 13.3)。但在模拟器上,它不会崩溃。是否有可能修复或预览不适用于延迟?@Mikk,静态预览不跟踪异步更改,但它在LivePreview中工作。