2016-11-15 5 views
0

Я разбираю некоторые данные JSON, используя запрос Http POST и NSURLRequest. Но когда у меня есть значения в sendAsynchronousRequest, я не могу использовать эту сторону этого запроса. См. Пример ниже:Как использовать значения из sendAsynchronousRequest?

[NSURLConnection sendAsynchronousRequest:rq queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
    { 
     NSError *parseError = nil; 
     dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError]; 
     NSLog(@"Server Response (we want to see a 200 return code) %@",response); 
     NSLog(@"dictionary %@",dictionary); 
    }]; 

Мой вопрос: как я могу использовать значение словаря там, где оно мне нужно? Спасибо

+0

Вы можете использовать его ** внутри ** – vadian

+0

@vadian, я хочу поместить эти значения на стол View. Так как я могу использовать его внутри. – User9975

+1

Поместите код для заполнения и перезагрузки вида таблицы внутри блока завершения. Подумайте асинхронно – vadian

ответ

2

Вы можете сделать это разными способами. Один из способов - объявить свойство и использовать его внутри блока.

Как вы делаете асинхронный вызов, лучше иметь свои собственные блоки для ответа на эти вызовы.

Объявляет блок завершения первым:

typedef void (^ ResponseBlock)(BOOL success, id response); 

и объявить метод, который использует этот блок в качестве паров:

- (void)processMyAsynRequestWithCompletion:(ResponseBlock)completion; 

и включают в своем асинхронный вызов этого метода:

- (void)processMyAsynRequestWithCompletion:(ResponseBlock)completion{ 

[NSURLConnection sendAsynchronousRequest:rq queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
{ 
    NSError *parseError = nil; 
    dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError]; 
    NSLog(@"Server Response (we want to see a 200 return code) %@",response); 
    NSLog(@"dictionary %@",dictionary); 
    completion(YES,response); //Once the async call is finished, send the response through the completion block 
}]; 

} 

Вы можете вызвать этот метод в любом месте.

[classInWhichMethodDeclared processMyAsynRequestWithCompletion:^(BOOL success, id response) { 
     //you will receive the async call response here once it is finished. 
     NSDictionary *dic = (NSDictionary *)response; 
     //you can also use the property declared here 
      _dic = (NSDictionary *)response; //Here dic must be declared strong 
}]; 
+0

Не получив успеха. Это не работает. – User9975

+0

Пожалуйста, объясните, что не работает. –

+0

В классеInWhichMethodDeclared не получается значение словаря. – User9975