2013-07-17 6 views
0

Я NSLogging поток NSData, который я получаю обратно из внешнего источника, но по какой-то причине он продолжает ломать себя на 40 символов, и переходит к новой строке, когда он набирает 40 символов , Я пытаюсь разобрать поток и выбрать значения в определенных местах, так что это огромная проблема, что она продолжает прыгать вниз по линии. Кто-нибудь знает, как это поведение можно предотвратить? Вот пример моего NSLog:NSData Разбивается на куски

2013-07-17 14:44:32.638 Test App 
[4041:907] data equals <3e2c042c 31333037 31373032 34302d30 372c0100> 
2013-07-17 14:44:32.698 Test App 
[4041:907] data equals <00000000 2c020000 0000002c 03000000 00002cff> 
2013-07-17 14:44:32.758 Test App 
[4041:907] data equals <00000000 00> 

EDIT: Что касается соответствующего кода, я использую третью партию BLE библиотеку, поэтому я решил, что это не было бы много пользы. Это в основном только линии соответствующего кода:

NSData *data = [BLEdevice readReceivedBytes]; 
NSLog(@"data equals %@", data); 

Я дал предложение Роба выстрел, и это был результат:

2013-07-17 15:21:35.399 Test App[4060:907] data equals <3e2c012c 31333037 31373033 32312d30 372cff00> 
2013-07-17 15:21:35.401 Test App[4060:907] data length equals =20 
2013-07-17 15:21:35.458 Test App[4060:907] data equals <00000000> 
2013-07-17 15:21:35.460 Test App[4060:907] data length equals =4 

Это должно быть потоковое назад все только в одной строке, а не с макс. 40 символов. Может быть, это вещь BLE.

+3

Это поможет, если вы указали соответствующий код. – rmaddy

+0

NSData что? Как вы получаете свой поток? Вы установили ограничение на буфер? Когда звонит ваш звонок? – Larme

+0

@ Larme Это устройство стороннего BLE. На самом деле я наложил ограничение на буфер, его вход и вывод 512 каждый. – John

ответ

2

Если BLE отправляет только небольшие пакеты, возможно, вы ничего не можете с этим поделать. И вы , вероятно, не должны ожидать, что пакеты определенного размера возвращаются.

Вы должны собрать все полученные куски в NSMutableData объекта вместо:

// Init once: 
NSMutableData *collectedData = [NSMutableData data]; 

// Append received data in your read loop: 
NSData *data = [BLEdevice readReceivedBytes]; 
[collectedData appendData:data]; 

Теперь вы можете осуществлять поиск конкретных байтов в collectedData.

+0

Удивительная благодарность! Как примечание, знаете ли вы, есть ли какой-либо вызов вне appendData, который предотвратит перезапись собранных данных каждый раз при поступлении нового потока? – John

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