2012-03-22 8 views
1

をお読みください。CoreBluetoothは私が私のデバイス(周辺機器)の一人として私に配列 のな長さや配列を送信CoreBluetooth</p> <p>で何かを読み書きしようとしたNSData

私は、周辺

(void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error; 

から答えを得るとき、私は私はそれが

問題ではありません一つの値を読んだとき を呼んでいる。この方法で

(void)readValueForCharacteristic:(CBCharacteristic *)characteristic; 

を値を読みます

char arrayLength; 

charakteristik.value getBytes:&arrayLength lenght:SERVICE_ARRAYLENGTH_LEN]

self.MyArrayLenght=(float)arrayLength; -

しかし、私は、周辺からの配列を取得するときに私は私が

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:charakteristik.value] 

にしようとしたとき

charakteristik.valueはNSDataの

であるそれらの読み方を知りませんエラーが発生しました

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x4e, 0x49, 0x42, 0x41, 0x72, 0x63, 0x68, 0x69)' 

16進数(0x4e、0x49,0x42,0x41,0x72,0x63,0x68,0x69 .......)は、私が読んで後で表示したいデータです

NSDataはどのように読むことができますか?またはNSDataをNSArrayに変換する方法は?

編集: 問題は、おそらく今では、あなたの質問に答えただろう

答えて

-1

を解決しました。念のため

:あなたは、メソッドを持つNSDataのコンテンツを読むことができます:

char *data = [NSData data]; 

データの長さは、それは単にあなたができるあなたのデータが含まれているかどうかを確認するに

[NSData length]; 

で取得されます

あなたは、あなたがどのサービスを発見したいのかを定義することができますその1つだけ。あなたは、あなたが私がからアーカイブされていないNSDataオブジェクトその怖い

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

コール

[peripheral discoverCharacteristics:[NSArray arrayWithObject:[CBUUID UUIDWithString:@"ABCD"]] forService:service]; 

・ホープ、このヘルプ

1

中で興味を持っている特定の特性に耳を傾けるだけにさらに制限することができます周辺機器は不完全です。 CoreBluetoothは、セントラルデバイスによって設定される毎回更新できる特性の最大サイズを制限します。超えた部分は転送中に切り捨てられます。おそらくあなたの配列のサイズがサイズの制限を超えているため、中央のデバイスは競合するデバイスを受け取りませんでした。

- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didSubscribeToCharacteristic:(CBCharacteristic *)characteristic

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request

最大長の制限は、デバイスからデバイスへの変化は、CBPeipheralManagerDelegate方法によって与えられるCBCentralオブジェクトのmaximumUpdateValueLengthプロパティからサイズ制限を取得することができ- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests

またはCBCeを提供する他の方法ntralオブジェクト。

オーバーサイズのデータ​​を送信する場合は、データを分割して数回送信する必要があります。中央デバイスでは、これらの部分を結合して元のデータオブジェクトを再構築できます。アップルは、オーバーサイズのデータ​​を送信する方法を示すサンプルコードを提供しています。 BTLE Central Peripheral Transfer

関連する問題