iPhone не может проанализировать результаты JSON с YELP
Я пытаюсь проанализировать проверенный JSON из результатов поиска yelp.
Это правильно выплевывает JSON, как и ожидалось (подтверждено в браузере симулятора и мой собственный).
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
NSString *dump = [[[NSString alloc] initWithData: data encoding:NSUTF8StringEncoding] autorelease];
NSLog(@"Did Recieve data: %@", dump);
[JSONData appendData:data];
}
Но когда мое соединение завершает загрузку, мне трудно извлечь результаты и проанализировать данные:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"Connection Did Finish Loading");
NSError *error = nil;
id cureLocations = [[CJSONDeserializer deserializer] deserializeAsDictionary:JSONData error:&error];
[JSONData release];
NSLog(@"Connection finished loading: %@", error);
}
Я получаю: Соединение завершено загрузка: Ошибка домена =CJSONDeserializerErrorDomain Code=-11 "Операция не может быть завершена. (CJSONDeserializerErrorDomain ошибка -11.)"
Я переключился на TouchJSON из SBJSON, потому что я не смог извлечь его из этого фреймворка. Я попытался загрузить его в словари и массивы с нулевым результатом. В этот момент я часами бился головой о клавиатуру и был бы очень признателен за любой ввод.
Обновить:
Я дурачок Я не инициализировал JSONData. Пожалуйста, примите мои извинения за потраченное время и спасибо за ваши предложения.
2 ответа
Тьфу, после дальнейшего просмотра приложения кажется, что я бросился копировать свои образцы в этот проект и забыл инициализировать JSONData:
self.JSONData = [[[NSMutableData alloc] init]autorelease];
Затем я обновил свой метод didReceiveData:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[[self JSONData] appendData:data];
}
И все теперь работает как положено. Это второй раз, когда я столкнулся с этой ошибкой. Наверное, я всегда ожидал, что отладчик поднимет его. Спасибо за все время и помощь.
SBJSON - довольно приличный и известный парсер. Если он не проанализировал ваш ввод, вы, вероятно, предположите, что это потому, что ввод был действительно плохим. Если TouchJSON его тоже не анализирует, ввод определенно плохой. Так что с тобой что-то происходит JSONData
объект, который хитро
Я бы предложил вам распечатать ваши данные JSON на консоли в вашем connectionDidFinishLoading
метод и попробуйте повторно проверить его. Посмотрите, что на самом деле находится в объекте данных, который вы передаете в CJSON.