gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:26:22 25 4
gpt4 key购买 nike

我在 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 被注入(inject)到 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 时,它崩溃了

线程 1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

如果我从详细 View 中删除List View ,它就可以正常工作。如果我使用 @ObjectBinding 代替(就像我的代码中的注释行一样),情况也是一样。

与之前的测试版中使用的代码相同。

最佳答案

这是 Xcode 11 beta 3 中的一个错误。旧的行为可能会再次出现。

来自https://developer.apple.com/tutorials/swiftui/handling-user-input截至 2019 年 7 月 4 日:

Step 4

In Xcode 11 beta 3, the LandmarkDetail view doesn’t automatically access the UserData object in the view hierarchy’s environment. The workaround for this is to add the environmentObject(_:) modifier to the LandmarkDetail view.

关于swiftui - 一起使用 NavigationLink、@EnvironmentObject 和 List 时,Xcode 11 beta 3 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56871714/

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