Неожиданно обнаружил ноль при развертывании дополнительного значения Bluetooth с Swift - PullRequest
0 голосов
/ 03 мая 2018
import UIKit
import CoreBluetooth
import SciChart

let maestroBrainDataCBUUID = CBUUID(string: "49535343-1E4D-4BD9-BA61-23C647249616")

class HRMViewController: UIViewController {
    var sciChartSurface: SCIChartSurface?
    var wave:Double! = 0.0

    var lineDataSeries: SCIXyDataSeries!
    var scatterDataSeries: SCIXyDataSeries!

    var lineRenderableSeries: SCIFastLineRenderableSeries!
    var scatterRenderableSeries: SCIXyScatterRenderableSeries!

    var timer: Timer?
    var phase = 0.0
    var i = 0

    @IBOutlet weak var brainRateLabel: UILabel!

wave означает данные Bluetooth в режиме реального времени.

    var centralManager: CBCentralManager!
    var maestroPeripheral:CBPeripheral!

    override func viewDidLoad() {
        super.viewDidLoad()

        <elide>
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        if nil == timer{
            timer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true, block: updatingDataPoints)
        }
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        if nil != timer{
            timer?.invalidate()
            timer = nil
        }
    }

    func updatingDataPoints(timer:Timer){
        i += 1
        if wave != nil {
            lineDataSeries.appendX(SCIGeneric(i), y: SCIGeneric((wave)))
        }

        phase += 0.01

        sciChartSurface?.zoomExtents()
        sciChartSurface?.invalidateElement()
    }

    func createDataSeries(){
        lineDataSeries = SCIXyDataSeries(xType: .double, yType: .double)
        lineDataSeries.fifoCapacity = 500
        lineDataSeries.seriesName = "line series"

        for i in 0...500{
            lineDataSeries.appendX(SCIGeneric(i), y: SCIGeneric(wave))
        }

        i = Int(lineDataSeries.count())
    }

Я пытался создать график в реальном времени, используя фреймворк для научной графики. Но если я пытаюсь запустить кодирование, я получаю сообщение об ошибке:

«Неожиданно обнаружен ноль при развертывании необязательного значения»

Как решить эту проблему? Есть ли кто-нибудь, у кого есть опыт, как у меня ТТ?

extension HRMViewController: CBCentralManagerDelegate {
  func centralManagerDidUpdateState(_ central: CBCentralManager) {
    switch central.state {

    <elide>
  }
}

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic,
                  error: Error?) {
    switch characteristic.uuid {
      case maestroBrainDataCBUUID:
        wave = Double(brainData(from: characteristic))*3.3/65536

      default:
      print("Unhandled Characteristic UUID: \(characteristic.uuid)")
    }
  }

Я использовал его для отображения волнового значения, но я получил ошибку, когда снял опцию. Так что, если мы используем if, чтобы отобразить линейную диаграмму, если она не равна нулю, то произошла ошибка, и я попытался несколько раз и получил ошибку во время выполнения. Что мне делать?

1 Ответ

0 голосов
/ 07 мая 2018

Я думаю, это может быть вызвано отсутствием вызова createDataSeries () в вашем коде. Поэтому при вызове updateDataPoints () экземпляр lineDataSeries не инициализируется.

Попробуйте добавить вызов createDataSeries () перед вызовом updateDataPoints () или по крайней мере добавьте проверку nil для экземпляра lineDataSeries в updateDataPoints ().

...