2012-11-26 11 views
5

Moja aplikacja CoreBluetooth musi włączyć "bit wskazania" w deskryptorach konfiguracji charakterystycznych dla klienta. Oto co zrobiłem:CoreVluetooth writeValue: forDescriptor: issue

  1. Start, aby zeskanować
  2. Start, aby połączyć się z urządzeniem
  3. połączeń discoverServices
  4. połączeń discoverCharacteristics wewnątrz zwrotnego

    - (void) obwodowej (CBPeripheral *) peripheral didDiscoverServices: (NSError *) error

  5. Zadzwoń pod discoverDescriptorsForCharacteristic wewnątrz callb ack

    - (void) obwodowa (CBPeripheral *) didDiscoverCharacteristicsForService obwodowych (CBService *) Błąd usługi: (NSError *) Błąd

  6. Wewnątrz zwrotnego

    - (void) obwodowa (CBPeripheral *) didDiscoverDescriptorsForCharacteristic obwodowych (CBCharacteristic *) charakterystyczny błąd: (NSError *) błąd

Zadzwoniłem:

 if ([[descriptor.UUID representativeString] isEqualToString:@"2902" ]) 
     { 
      const unsigned char raw_data[] = {0x02}; 
      NSData *myData = [NSData dataWithBytes: raw_data length: 2]; 
      [self.cBCP writeValue:myData forDescriptor:descriptor]; 
     } 

Ale moja aplikacja ulega awarii w writeVale:. Komunikat o błędzie na konsoli:

Każdy pomysł? Dzięki

+1

Zastanawiam się czy jest jakiś przykładowy kod korzystania writeVale: forDescriptor. –

+0

W rzeczywistości moje rozwiązanie nie jest używać writeValue: forDescriptor. –

+0

Czy możesz wyjaśnić, w jaki sposób włączyć wskazanie bez użycia parametru writeValue: forDescriptor? Utknąłem w tym samym miejscu ... – imcc

Odpowiedz

-1

Problem polega na tym, że nie można użyć metody writeValue: forDescriptor: do napisania wartości deskryptora konfiguracji klienta (UUID = 2902).

Zamiast tego należy użyć metody setNotifyValue: forCharacteristic: metody klasy CBPeripheral, aby skonfigurować wskazania klienta lub powiadomienia o wartości charakterystycznej na serwerze.

0

Dość stare pytanie, ale ponieważ nie została wysłuchana, wydaje się, że jeśli metoda setNotifyValue(_:for:) zajmie to za Ciebie, to zależy od właściwości charcateristics poniżej:

  • Informuj tylko: Powiadomienia zostaną włączone.
  • Tylko wskaż: wskazania będą włączone.
  • Wskazuje & Powiadom: TYLKO Powiadomienia będą włączone.

Jeśli więc chcesz włączyć wskazania, charakterystyka musi mieć tylko właściwość wskazania, a powiadomienie powinno zostać usunięte.

Domyślam się, że głównym powodem tego są wskazania są znacznie wolniejsze, więc iOS zawsze będzie preferował najszybszą możliwą opcję, chyba że jest to wymóg wskazania.

Read more on the Apple docs