温馨提示:本文翻译自stackoverflow.com,查看原文请点击:swiftui - Xcode 11 beta 3 crashing when using NavigationLink, @EnvironmentObject and List together
combine swiftui xcode11

swiftui - 一起使用NavigationLink,@ EnvironmentObject和List时Xcode 11 beta 3崩溃

发布于 2020-03-27 10:46:31

我在SwiftUI / Xcode 11 beta 3遇到了类似以下代码的奇怪崩溃(我仅保留了最基本的数量来显示行为):

import SwiftUI
import Combine

final class AppData: BindableObject  {
    let didChange = PassthroughSubject<AppData, Never>()

    init() { }
}

struct ContentView : View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: DetailView() ) {
                Text("link")
            }
        }
    }
}

struct DetailView : View {
    @EnvironmentObject var appData: AppData
//  @ObjectBinding var appData = AppData() -> Works 

    var body: some View {
        List {
            Text("A")
            Text("B")
            Text("C")
        }
    }
}

BindableObject被注入在SceneDelegate.swift这样的:

....
        // Use a UIHostingController as window root view controller
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: ContentView()
                                           .environmentObject(AppData()))
            self.window = window
            window.makeKeyAndVisible()
        }
....

当跟随NavigationLink它崩溃

Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

如果我List从详细视图中删除该视图,则可以正常工作。如果我改用相同的@ObjectBinding代码(如代码中的注释行)。

在以前的Beta中使用的代码相同。

查看更多

查看更多

提问者
Bogdan Farca
被浏览
99
Sam Rayner 2019-07-04 22:36

这是Xcode 11 beta 3中的一个错误。旧的行为可能会恢复。

https://developer.apple.com/tutorials/swiftui/handling-user-input为2019年7月4日的:

步骤4

在Xcode 11 beta 3中,LandmarkDetail视图不会在视图层次结构的环境中自动访问UserData对象。解决方法是将environmentObject(_ :)修饰符添加到LandmarkDetail视图。