Swift 3에서 코어 블루투스를 사용하면 CBPeripheral.writeValue()
을 사용하여 Central에 특성을 쓰고, UISlider
의 값이 변경되면이 작업을 수행합니다. 나는 슬라이더를 천천히 드래그 했더라도 때로는 중앙에서 값의 점프가 보일 것이라고 생각했습니다. 공중에서의 부패가 일어나고 있다고 생각했기 때문에 동일한 값을 세 번 쓰도록 특성을 변경했습니다. 이제 Central 매치에서받은 모든 값이 Central 매치에서 작동 할 때만 나타납니다. 현재 코드는 다음과 같습니다.BLE 특성 쓰기 값이 때때로 임의 값으로 점프
@IBAction func slideValChanged(_ sender: UISlider)
{
let sliderVal = UInt8(sender.value.rounded(FloatingPointRoundingRule.down))
if (sliderVal != self.sliderVal)
{
self.sliderVal = sliderVal
self.bytes.removeAll()
self.bytes = [self.sliderVal, self.sliderVal, self.sliderVal]
DispatchQueue.global(qos: .userInitiated).async
{
self.data = Data(bytes: self.bytes)
self.peripheral.writeValue(self.data, for: self.writeCharacteristic!, type: CBCharacteristicWriteType.withResponse)
print("Write values sent:", self.bytes[0], self.bytes[1], self.bytes[2])
}
}
}
그럼에도 불구하고, 나는 여전히 값 점프를 보지만 특별한 것은 없습니다. print()
문은 항상 동일한 (올바른) 번호를 세 번 인쇄합니다. 마찬가지로 Central에서 값이 점프 할 때 3 개의 동일하지만 잘못된 값을받습니다. 어떻게 이럴 수있어? 내가 생각할 수있는 것은 중핵 블루투스에있는 무엇인가 그것이 공중에 얹히 기 전에 가치를 바꾸고있다. 그러나 나는 확실하지 않다. 그리고 나는 나의주의를 어디에 초점을 맞출 지 모른다.
아마도 'self.data' (분명히)에'Data' 유형이 있다면'self.data를 Data'로 쓰는 이유는 무엇입니까? –
약간의 관계없는 코드. 나는 제거하고 재시험했다. 같은 문제. –