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, чтобы отобразить линейную диаграмму, если она не равна нулю, то произошла ошибка, и я попытался несколько раз и получил ошибку во время выполнения. Что мне делать?