【问题标题】:Unexpectedly found nil while unwrapping an Optional value bluetooth with swift使用 swift 打开可选值蓝牙时意外发现 nil
【发布时间】:2018-05-03 20:25:30
【问题描述】:
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是蓝牙数据实时的意思。

    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())
    }

我尝试使用 sci-chart 框架制作实时图表。 但是,如果我尝试运行编码,则会收到错误消息:

“在展开可选值时意外发现 nil”

如何解决这个问题? 有没有人和我一样TT的经历?

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来让折线图出现,如果不是nil的话,那就报错了,我试了好几次,都报了runtime error。我该怎么办?

【问题讨论】:

  • 究竟是哪一行代码导致了错误?
  • 帮自己一个忙,不要再像这样声明你的变量了:SCIXyDataSeries!。您应该将它们设为可选:SCIXyDataSeries?。这将防止您的大部分解包错误!
  • 我在那些谎言中遇到了一个可选错误“lineDataSeries.appendX(SCIGeneric(i), y: SCIGeneric((wave))”
  • 检查您的变量是否为 null (nil)。 lineDataSeries,i,wave。

标签: swift bluetooth scichart


【解决方案1】:

我认为这可能是由于您的代码中缺少 createDataSeries() 调用造成的。因此,当调用 updateDataPoints() 时 lineDataSeries 实例未初始化。

尝试在调用 updateDataPoints() 之前添加 createDataSeries() 调用,或者至少在 updateDataPoints() 中添加对 lineDataSeries 实例的 nil 检查。

【讨论】:

    猜你喜欢
    • 2018-09-22
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多