в то время как делегат равен нулю или не реализует периферийное устройство: didUpdateValueForCharacteristic: error :? - PullRequest
0 голосов
/ 24 апреля 2019

В моем приложении я хочу получить информацию об аккумуляторе от устройства BLE через Bluetooth. Я новичок для CoreBluetooth рамки.

Пожалуйста, дайте мне решение, как получить данные с устройства BLE в приложении.

Ниже мой ViewController:

import UIKit
import CoreBluetooth

class BluetoothDevicesViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate {

    @IBOutlet var bluetoothDevicesTableView: UITableView!

    var peripheralsArray = [CBPeripheral]()
    var centralManager: CBCentralManager?

    let YOUR_CHARACTERISTIC_UUID = "47e9ee00-47e9-11e4-8939-164230d1df67"

    var peripheralData = PeripheralData.sharedInstance

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func viewDidAppear(_ animated: Bool)
    {
        super.viewDidAppear(animated)
        if peripheralData.peripherals != nil {
            peripheralsArray = peripheralData.peripherals
            bluetoothDevicesTableView.reloadData()
        }
    }

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        print(central.state)
    }
}

extension BluetoothDevicesViewController: UITableViewDelegate, UITableViewDataSource {

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return peripheralsArray.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "DevicesTableViewCell", for: indexPath) as? DevicesTableViewCell

        let peripheral = peripheralsArray[indexPath.row]
        centralManager?.connect(peripheral, options: nil)

        if peripheral.state == .connected {

            cell?.circleView.backgroundColor = Common.blueColor

            peripheral.delegate = self
            peripheral.discoverServices(nil)

        } else {
            cell?.circleView.backgroundColor = Common.redColor
        }

        cell?.deviceNameLabel.text = peripheral.name
        return cell!
    }

}

когда я запускаю это, я получаю предупреждение ниже на консоли.

API MISUSE: Discovering services for peripheral <CBPeripheral: 0x282e82a80, identifier = C8C81899-0AC7-B5B6-72F4-5B9631B22D1E, name = mote 200, state = connected> while delegate is either nil or does not implement peripheral:didDiscoverServices:

1 Ответ

1 голос
/ 24 апреля 2019

Внутри viewDidLoad

centralManager = CBCentralManager(delegate: self, queue: DispatchQueue.global())

func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) { 
}

Вы можете следовать Bluetooth

...