【问题标题】:SwiftUI Fatal error: No ObservableObject of type “ ” foundSwiftUI 致命错误:未找到“”类型的 ObservableObject
【发布时间】:2020-11-19 02:28:15
【问题描述】:

我遇到以下致命错误:

SwiftUI 致命错误:未找到类型为“ ”的 ObservableObject 并且发生@EnvironmentObject 错误:可能缺少此视图的祖先”。

Xcode 版本:

Xcode:12.1 和核心蓝牙

我的代码如下:

ble.swift

import CoreBluetooth

・・・

class BLEConnection:NSObject, CBPeripheralDelegate,CBCentralManagerDelegate,ObservableObject 
{
 @EnvironmentObject var GS: GlobalStatus

 ・・・・
  
  func startCentralManager()
  {
    //Process of start BLE Scan
  }

  public func centralManager(・・・) ← Scanned Peripheral
  {
    let localName:String
   
    if(localName == GS.beaconid)  ← ★★★Fatal Error Occured this point.★★★
    {
      ・・・・
    }
  ・・・・

GlobalStatus.swift

class GlobalStatus: ObservableObject
{
  @Published var beaconid = "ID001"
}

项目名称.swift

@main
struct ProjectName: App
{
  let persistenceController = PersistenceController.shared
  
  var body: some Scene
  {
     WindowGroup
     {
       ContentView()
       .environment(\.managedObjectContext,persistenceController.container.viewContext)
       .environmentObject(GlobalStatus())   
     }  
  }
}

ContentView.swift

・・・
struct ContentView: View
{
  @ObservedObject var bke = BLEConnection()
  
  var body: some VIew
  {
    NavigationView
    {
       Text("Test")
    }.onAppear(perform: ble.startCentralManager)
  }
}

我该如何解决这个问题? 提前致谢。

【问题讨论】:

    标签: ios swift xcode swiftui


    【解决方案1】:

    @EnvironmentObject 用于 SwiftUI 视图。在课堂上只需使用常规属性:

    class BLEConnection:NSObject, CBPeripheralDelegate,CBCentralManagerDelegate,ObservableObject 
    {
     var GS: GlobalStatus!
     
     // ...
    }
    

    在您看来,只需将一个注入另一个(作为一种方法)

    struct ContentView: View
    {
     @EnvironmentObject var GS: GlobalStatus
      @ObservedObject var bke = BLEConnection()
      
      var body: some VIew
      {
        NavigationView
        {
           Text("Test")
        }.onAppear {
           ble.GS = self.GS
           ble.startCentralManager()
        }
      }
    }
    

    【讨论】:

    • 根据答案修复sorce解决了问题。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2023-03-03
    • 2020-05-11
    • 2021-03-11
    • 2021-12-30
    相关资源
    最近更新 更多