swift - CoreBluetooth XPC 连接无效

标签 swift core-bluetooth xpc

public class BLE: NSObject, CBCentralManagerDelegate {

    var centralManager:CBCentralManager!

    public override init() {
        super.init()
        self.centralManager = CBCentralManager.init(delegate: self, queue: nil)
    }

    public func centralManagerDidUpdateState(_ central: CBCentralManager) {

        switch central.state {
        case .unknown:
            print("unknown")
        case .resetting:
            print("resetting")
        case .unsupported:
            print("unsupported")
        case .unauthorized:
            print("unauthorized")
        case .poweredOff:
            print("powered off")
        case .poweredOn:
            print("powered on")
            self.centralManager.scanForPeripherals(withServices: nil, options: nil)
        }
    }
}

这是我的代码,每当我运行它时,它都会给我消息

“[CoreBlueooth] XPC Connection Invalid”

我曾尝试将 NSBluetoothPeripheralUsageDescription 添加到我的 info.plist 文件中,但没有成功。

奇怪的是,如果我直接初始化 CBCentralManager 而不是使用类,那么一切正常。

只有当我尝试通过创建类 BLE 或任何其他类的对象来初始化 CBCentralManager 时,才会出现此问题。

最佳答案

CBCentralManager 的引用应该是作为成员变量的类的强引用。它不能用作本地引用。

下一步试试:

class ViewController: UIViewController {
   var ble: BLE!
   override func viewDidLoad() {
      super.viewDidLoad()

      ble = BLE()
  }
}

class BLE: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate {
   private var manager: CBCentralManager!

   required override init() {
      super.init()
      manager = CBCentralManager.init(delegate: self, queue: nil)
   }

   func centralManagerDidUpdateState(_ central: CBCentralManager) {
      var consoleLog = ""

      switch central.state {
      case .poweredOff:
          consoleLog = "BLE is powered off"
      case .poweredOn:
          consoleLog = "BLE is poweredOn"
      case .resetting:
          consoleLog = "BLE is resetting"
      case .unauthorized:
          consoleLog = "BLE is unauthorized"
      case .unknown:
          consoleLog = "BLE is unknown"
      case .unsupported:
          consoleLog = "BLE is unsupported"
      default:
          consoleLog = "default"
      }
      print(consoleLog)
   }
}

关于swift - CoreBluetooth XPC 连接无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49917646/

相关文章:

ios - 试图在我的 UITableView 中返回数组的每个索引

ios - CLGeocoder reverseGeocodeLocation 错误-8

arrays - 数组元素作为函数中的参数

swift - 将项目从 firebase 加载到 pickerview 的问题

ios - 避免在 CoreBluetooth 中重新连接时发现服务和特征

ios - 如何在 Swift 5 中断开 BLE 设备

iOS Core蓝牙无法通过特性传输数据

objective-c - Xcode 5 上的 XPC 测试包

swift - NSSecureCoding 实现类必须在共享框架中才能与 XPC 一起工作吗?

objective-c - 如何在 OSX 中调试 XPC 服务和客户端应用程序之间的通信