【问题标题】:SwiftUI @State not updated in older projectSwiftUI @State 未在旧项目中更新
【发布时间】:2021-07-28 23:38:19
【问题描述】:

我正在尝试向现有项目添加一个简单的 SwiftUI 视图,但 @State 更改未正确传播。该代码在新项目中按预期工作,但在旧项目中不起作用。 @ObservedObject 也会发生同样的事情。

代码:

struct ChannelAccountsView: View {

    @State private var showGreeting = true

    var body: some View {
        VStack {
            Toggle(isOn: $showGreeting) {
                Text("Show welcome message")
            }.padding()

            if showGreeting {
                Text("Hello World!")
            }
        }
    }
}

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

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

新项目:

旧项目:

尝试了所有明显的修复:

  • 编辑 AppDelegate 并添加 SceneDelegate
  • 已编辑 Info.plist
  • 清理的项目和派生数据
  • 重置模拟器数据
  • 在多个模拟器/设备上测试

知道会发生什么吗?

【问题讨论】:

  • older project 是什么意思,它与new project 有何不同?
  • @Asperi older project -> 已存在 2 年以上且之前未使用 SwiftUI 的项目 new project -> 新创建的项目已选择 SwiftUI 作为 UI 创建选项

标签: xcode swiftui


【解决方案1】:

我遇到了类似的问题,根本原因是我的目标在 Build Settings 中的 Swift Compiler - General 类别下将 Reflection Metadata Level 设置为 None

将其更改为 All 已为我修复:

【讨论】:

    【解决方案2】:

    在项目中创建新目标解决了这些问题。仍然不确定根本原因是什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-21
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多