2012-06-14 3 views
4

Я пытаюсь получить некоторые данные из веб-службы, обслуживающей JSON. Но я не знаю, что пошло не так в моем коде. Это выглядит так просто, но я не мог получить никаких данных.Использование AFJSONRequestOperation

Этот код:

NSURLRequest *request = [NSURLRequest requestWithURL:URL]; 

AFJSONRequestOperation *operation = [AFJSONRequestOperation 
    JSONRequestOperationWithRequest:request 
    success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
    DumpDic = (NSDictionary*)[JSON valueForKeyPath:@"description"] ; 
    } 
    failure:nil 
]; 

[operation start]; 

AboutTXT = [DumpDic objectForKey:@"description"]; 

Вот JSON URL.

EDIT

JSON из URL:

{ 
    "clazz":"AboutList", 
    "description":{ 
     "clazz":"DescriptionContent", 
     "description":"ASTRO Holdings Sdn. Bhd. (AHSB) Group operates through two holding companies – ASTRO Overseas Limited (AOL) which owns the portfolio of regional investments and ASTRO Malaysia Holdings Sdn Bhd (AMH/ASTRO) for the Malaysian business, which was privatized in 2010 and is currently owned by Usaha Tegas Sdn Bhd/its affiliates, and Khazanah Nasional Berhad." 
    }, 
    "id":{ 
     "inc":-1096690569, 
     "machine":1178249826, 
     "new":false, 
     "time":1339660115000, 
     "timeSecond":1339660115 
    }, 
    "refKey":"AboutList" 
} 

ответ

13

ли успешно подключиться к серверу, является блок успеха называют?

заливка в блоке отказов и NSLog NSError возвращается блоком отказа:

failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
                 NSLog(@"%@", [error userInfo]); 
                } 

У меня есть еще один совет, я бы рекомендовал строить NSURLRequest с AFHTTPClient AFNetwork, это помогает с различными вещами и в целом делает вещи проще. Вы устанавливаете базовый URL-адрес, а затем даете ему путь для добавления к этой базе. Что-то вроде этого:

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:address]; 
[httpClient setParameterEncoding:AFJSONParameterEncoding]; 
NSMutableURLRequest *jsonRequest = [httpClient requestWithMethod:@"POST" 
                  path:@"events" 
                 parameters:dict]; 

Кроме того, вместо того, чтобы использовать valueForKeyPath может я предлагаю вам просто сделать objectForKey:

[JSON objectForKey:@"description"]; 

Кроме того, вы не должны получить доступ к DumpDic есть:

[operation start]; 
AboutTXT = [DumpDic objectForKey:@"description"]; 

Это асинхронный вызов, поэтому после начала операции DumpDic, скорее всего, будет доступен, прежде чем ему будут назначены данные с сервера. Таким образом, вы получаете доступ к ключу, который, вероятно, еще не существует.

Это должно быть сделано в блоке успеха или отказа. Эти блоки вызываются, как только соединение завершено, и данные готовы к использованию.

Так оно и должно выглядеть следующим образом:

AFJSONRequestOperation *operation = 
    [AFJSONRequestOperation JSONRequestOperationWithRequest:request 
                success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
    DumpDic = [JSON objectFor:@"description"]; 
    AboutTXT = [DumpDic objectForKey:@"description"]; 
    } 
    failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
    NSLog(@"%@", [error userInfo]); 
    }]; 

[operation start]; 
+0

Спасибо mjb162. Это работало для меня как кусок пирога. – Danialzo

+0

Спасибо :) очень хорошо работал :) –

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