SwiftUI 致命错误:未找到“”类型的 ObservableObject

Posted

技术标签:

【中文标题】SwiftUI 致命错误:未找到“”类型的 ObservableObject【英文标题】:SwiftUI Fatal error: No ObservableObject of type “ ” found 【发布时间】: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)
  

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

【问题讨论】:

【参考方案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解决了问题。非常感谢。

以上是关于SwiftUI 致命错误:未找到“”类型的 ObservableObject的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI-> 线程 1:致命错误:未找到 MyObject.Type 类型的可观察对象(工作表中的 EnvironmentObject)

SwiftUI 错误未找到 GlobalEnvironment 类型的 ObservableObject

SwiftUI iOS - 如何使用捕获的硬件按键事件

致命错误:未捕获的错误:未找到“Omnipay\Omnipay”类

致命错误:未捕获的错误:未找到类“用户名”

mpdf 不工作 [致命错误:未找到特征'Mpdf\Strict']