SwiftUI或Beta-State导致崩溃?

时间:2019-06-21 13:48:55

标签: ios swift swiftui

我正在体验SwiftUI和xCode 11 Beta 2的怪异行为,我想知道这是否与错误的代码或beta状态有关。我有以下代码:

import SwiftUI
import Combine

struct ContentView : View {

    @EnvironmentObject var persistence: Persistence

    var modal = Modal(SignupView())

    var body: some View {
        VStack {
            Text("Hello \(persistence.userNickname)")
            Button(action: {
                self.persistence.isLoggedIn.toggle()
            }) {
                Text("Swap")
            }
            }.presentation(persistence.isLoggedIn ? nil : modal)
    }
}


struct SignupView: View {

    @EnvironmentObject var persistence: Persistence

    var body: some View {
        Text("Please Login")
    }

}

如果我注释 @EnvironmentObject var persistence: Persistence中的SignupView,则该应用程序可以正常运行,并且模式视图的呈现也可以完美。

相反,如果我将@EnvironmentObject var persistence: Persistence保留在SignupView中,但未注释(因此为活动代码),则应用会在启动时崩溃AppDelegate中保留任何Stacktrace ... Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

持久性对象的类型为BindableObject,并且已正确地作为.environmentObject添加到ContenView中的SceneDelegate中。 isLoggedIn属性设置为false

有什么线索可以说明我是在处理Beta还是实际问题?

2 个答案:

答案 0 :(得分:0)

我在SwiftUI中遇到了类似的崩溃,并带有Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)垃圾。

将我的SwiftUI视图从class转换为struct进行了修复。

答案 1 :(得分:-2)

嗯,这似乎是由代码错误引起的。如果我按如下方式编写ContentView,则它会起作用:

struct ContentView : View {

    @EnvironmentObject var persistence: Persistence

    var body: some View {
        VStack {
            Text("Hello \(persistence.userNickname)")
            Button(action: {
                self.persistence.isLoggedIn.toggle()
            }) {
                Text("Swap")
            }
            }.presentation(persistence.isLoggedIn ? nil :
                Modal(SignupView().environmentObject(persistence))
        )
    }
}

我显然也必须为我的.environmentObject声明SignupView(模拟SceneDelegate中为ContentView做的事情)

但是没有更优雅的方式吗?

相关问题