2010-03-14 3 views
0

Я получаю RESTFUL url и возвращаю результаты. Результаты приведены в JSON. Я отвечу в строку через:Как найти причину NSMutableData недействительно

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
NSString *json = [[NSString alloc] initWithBytes:[self.receivedData mutableBytes] length:[self.receivedData length] encoding:NSUTF8StringEncoding]; 

Переменная json имеет значение 0x0. Когда я курю над ним, я вижу <Invalid CFStringRef>. Как я могу отладить это, чтобы узнать, почему он недействителен? Я передаю JSON, переданный через браузер в парсе JSON. Это отлично.

Результаты возвращаются путем ввода идентификатора в URL-адрес. Другие идентификаторы возвращают результаты без проблем. Результирующий набор довольно большой.

ответ

2

Сначала я бы использовал initWithData:encoding: для настройки NSString. Небольшая разница, но этот метод существует по какой-то причине.

Тогда, я бы сделал hexdump self.receivedData, чтобы увидеть, что на самом деле там. Если эти данные неправильно кодируются UTF8, то initWithData:encoding: завершится с ошибкой.

(Google для NSData шестнадцатеричного дампа, чтобы найти функции полезности других людей, чтобы сделать это)

Я обнаружил, что иногда веб-службы небрежны с кодировкой. Поэтому я обычно реализовать запасной вариант, как это:

NSString* html = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; 
if (html == nil) { 
    html = [[NSString alloc] initWithData: data encoding: NSISOLatin1StringEncoding]; 
    if (html == nil) { 
     html = [[NSString alloc] initWithData: data encoding: NSMacOSRomanStringEncoding]; 
    } 
} 

Это отчасти грустно, что это требуется, но многие веб-сервисы не пишутся или настроены должным образом.

+0

Спасибо. Ваша техника, безусловно, дает дополнительную информацию. – 4thSpace

1

Используйте NSLog, чтобы посмотреть на байты.

+1

И если байты представляют данные как строку, вы можете вырезать и вставлять их в 0xED, чтобы сделать просмотр очень простым: http://www.suavetech.com/0xed/0xed.html – nall