2016-03-14 2 views
0

Я привязывания для подключения к аппаратной поддержкой BLUETOOTH, но я не могу получить уведомление, когда значение обновляется, и читать читать, вот мой код:Невозможно написать или прочитать CBPeripheral | CBMutableCharacteristic

func peripheral(peripheral: CBPeripheral, didDiscoverCharacteristicsForService service: CBService, error: NSError?) { 

    guard peripheral == self.peripheral && error == nil else { 
     return 
    } 

    if let characteristics = service.characteristics { 
     for characteristic in characteristics { 
      if characteristic.UUID == QuadrarCharacteristicUUID { 
       if let peripheral = self.peripheral { 
        self.quadrarCharacteristic = CBMutableCharacteristic(type: QuadrarCharacteristicUUID, 
         properties: [.Read, .Write, .Notify], 
         value: nil, 
         permissions: [.Readable, .Writeable]) 
        self.quadrarCharacteristic?.descriptors = characteristic.descriptors 
        peripheral.setNotifyValue(true, forCharacteristic: self.quadrarCharacteristic!) 
       } 
      } 
     } 
    } 
} 

и когда я писание:

func writeBytes() { 
      self.quadrarCharacteristic!.service.peripheral.writeValue(self.bytesToWriteArray[self.senderCounter], 
      forCharacteristic: self.quadrarCharacteristic!, type: CBCharacteristicWriteType.WithResponse) 
    } 

Я знаю, что даже писать не работает, потому что

func peripheral(peripheral: CBPeripheral, didWriteValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) 

не вызывается ... но если Я использую только

var quadrarCharacteristic: CBCharacteristic? 

и попытаться написать его, как не CBMutableCharacteristic, она работает, но я не могу получить уведомление работать ...

ответ

2

Вы не создаете новый CBMutableCharacteristic когда вы выступаете в качестве центрального, вы просто использовать CBCharacteristic объекты, которые даны вам в didDiscoverCharacteristicsForService -

func peripheral(peripheral: CBPeripheral, didDiscoverCharacteristicsForService service: CBService, error: NSError?) { 

    guard peripheral == self.peripheral && error == nil else { 
     return 
    } 

    if let characteristics = service.characteristics { 
     for characteristic in characteristics { 
      if characteristic.UUID == QuadrarCharacteristicUUID { 
       self.quadrarCharacteristic=charateristic 
       peripheral.setNotifyValue(true, forCharacteristic: self.quadrarCharacteristic!) 
       } 
      } 
     } 
    } 
} 

Кроме того, вы должны подтвердить, что ваша характеристика поддерживает уведомления.

Смежные вопросы