Я боюсь, что я новичок в программировании на цель-c, и у меня возникла проблема, которую я потратил целый день, пытаясь выяснить, и не могу, поэтому я скромно спрашиваю вас, ребята, может ли кто-нибудь помочь.
Я пытаюсь прочитать подробности со страницы JSON в Интернете (например, из каталога локальных сервисов) и установил библиотеку JSON в XCode, и, похоже, она работает нормально. Кстати, я разрабатываю для iPhone, и у меня установлены все последние версии.
Проблема в том, что из-за того, что я новичок и все такое, мне кажется, что я не могу получить всю необходимую мне информацию из файла JSON.
данные JSON, с которыми я тестирую, таковы:
"testlocal_response" = {
header = {
query = {
business = newsagent;
location = brighton;
page = 1;
"per_page" = 1;
"query_path" = "business/index";
};
status = ok;
};
records = (
{
address1 = "749 Rwlqsmuwgj Jcyv";
address2 = "<null>";
"average_rating" = 0;
"business_id" = 4361366;
"business_keywords" = "<null>";
"business_name" = "Gloucester Newsagents";
"data_provider_id" = "<null>";
"display_details" = "<null>";
"distance_in_miles" = "0.08";
fax = "<null>";
gridx = "169026.3";
gridy = "643455.7";
"image_url" = "<null>";
latitude = "50.82718";
"logo_path" = Deprecated;
longitude = "-0.13963";
phone = 97204438976;
postcode = "IY1 6CC";
"reviews_count" = 0;
"short_description" = "<null>";
"touch_url" = "http://www.test.com/business/list/bid/4361366";
town = BRIGHTON;
url = "<null>";
}
);
};
}
Теперь, на моей странице ViewController.m кода, в области 'connectionDidFinishLoading' я добавил:
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
[responseData release];
// make sure JSON has all been pulled in
NSLog(@"This is from the JSON page:\n");
NSLog(responseString);
NSError *error;
SBJSON *json = [[SBJSON new] autorelease];
// using either of these seems to make no difference?
NSDictionary *touchDirect = [json objectWithString:responseString error:&error];
//NSArray *touchDirect = [json objectWithString:responseString error:&error];
[responseString release];
if (touchDirect == nil)
label.text = [NSString stringWithFormat:@"JSON parsing failed: %@", [error localizedDescription]];
else {
NSMutableString *text = [NSMutableString stringWithString:@"Test directory details:\n"];
[text appendFormat:@"%@\n", [[[[touchDirect objectForKey:@"testlocal_response"] objectForKey:@"header"] objectForKey:@"query"] objectForKey:@"business"]];
label.text = text;
Проверяя это, я получаю возвращаемое значение для бизнеса («газетный киоск») или правильное местоположение («брайтон»). Моя проблема в том, что я не могу идти дальше в JSON. Я не знаю, как вытащить результат для фактических «записей», которые в тестовом примере содержат только одну из них, но их можно разделить с помощью скобок «(» и «)».
Как только я пытаюсь получить доступ к данным в этих областях записи (например, «address1» или «latitude» или «postcode»), происходит сбой и появляется сообщение «нераспознанный селектор отправлен на экземпляр»
ПОЖАЛУЙСТА, кто-нибудь может сказать мне, что я делаю неправильно ?! Я пробовал так много разных вещей и просто не могу дальше! Я читал в Интернете разные вещи, но, похоже, мне ничего не помогло.
Любые ответы высоко ценятся. Я также опубликовал вопрос на iPhone SDK, но пока не получил полезного ответа.
большое спасибо,
-Robsa