2015-03-12 6 views
3

Я использую stringWithUTF8String конвертировать мой NSData в NSString следующим образом:stringWithUTF8String возвращаются ноль, так как IOS 8.2 обновление

if ([[NSString stringWithUTF8String:[responsedata bytes]] isEqualToString:@"SUCCESS"]){ 
    dostuff... 
} 

Это работает нормально; однако, поскольку обновление 8.2 iOS, [[NSString stringWithUTF8String:[responsedata bytes]] вернуло нуль.

Я решил эту проблему, используя следующий код:

NSString *responseDataString = [[NSString alloc] initWithData:responsedata encoding:NSUTF8StringEncoding]; 

if ([responseDataString isEqualToString:@"SUCCESS"]){ 
    dostuff... 
} 

В обоих случаях responsedata «s напечатано описание было то же самое: <OS_dispatch_data: data[0x7aeb6500] = { leaf, size = 7, buf = 0x7c390360 }>

Мой вопрос: почему бы первый вариант возврата ноль, и ПОЧЕМУ внезапно после обновления iOS 8.2?

+0

Звук для меня, как ошибка, я предлагаю вам отправить отчет об ошибке с Apple – rckoenes

ответ

3

stringWithUTF8String ожидает буфер с нулевым завершением, но ваши NSData не завершены NUL.

В вашем примере NSData содержит 7 байтов, а ожидаемое значение равно 7 символам. Иногда это может произойти, когда в вашей NSData появляется NUL, но часто это не работает.

Единственный безопасный способ конвертации NSData, не связанный с NUL, должен также указывать NSString длину вашего буфера, как вы делаете в своем решении.

+0

Спасибо за объяснение! Таким образом, это не обязательно проблема iOS 8.2, но я был просто «счастлив», что он работал ранее ... – Stephan