2015-11-30 2 views
0

Я создаю собственный модуль, который использует CoreBluetooth.framework. Я пытаюсь реализовать RCT_EXPORT_METHOD, который вызовет this bluetooth write method.Как вы передаете NSData из JavaScript?

RCT_EXPORT_METHOD(write:(CBUUID *)peripheralUuid 
        forCharacteristicUuid:(CBUUID *)characteristicUuid 
        data:(NSData *)data /* <== HOW DO I PASS THIS IN? */ 
        withResponse:(BOOL)withResponse) 
{ 
    CBPeripheral *peripheral = /* my peripheral */; 
    CBCharacteristic *characteristic = /* my characteristic */; 

    if (peripheral && characteristic) { 
     [peripheral 
       writeValue:data 
       forCharacteristic:characteristic 
       type:withResponse ? 0 : 1]; 
    } 
} 

Что мне нужно сделать с RCTConvert получить NSData аргумент через родной мост?

ответ

1

После дальнейших исследований в source code я обнаружил, что вы не можете объявить NSData аргумент, вы должны передать его в качестве строки в кодировке Base64 (NSString), а затем использовать RCTConvert, чтобы преобразовать его в NSData.

RCT_EXPORT_METHOD(write:(CBUUID *)peripheralUuid 
        forCharacteristicUuid:(CBUUID *)characteristicUuid 
        data:(NSString *)data 
        withResponse:(BOOL)withResponse) 
{ 
    // .... 
    [peripheral 
      writeValue:[RCTConvert NSData:data] 
      forCharacteristic:/* ... */ 
      type:/* ... */]; 
}