를 실행하지 내 코드는 다음과 같습니다있는 NSURLConnection sendAsynchronous 여러 요청이 나는 웹 서비스</p> <p>을에 (루프의에서) URL의 10 개 요청을 전송 별도로 반환 여기</p> <p>으로 10 개 JSON 형식의 데이터를 얻을 것으로 예상했다
NSArray *reqArray = [10 requests of url inside];
NSMutableArray * saveArray = [prepare to store 10 JSON data in here];
NSInteger counter = [reqArray count];
for (NSURLRequest *request in reqArray) {
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSDictionary *result1 = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSDictionary *result2 = [result1 objectForKey:@"keyForValueIWant"];
[saveArray addObject:result2];
counter -- ;
if (counter == 0) {
NSLog(@"all done");
}
}];
}
completionHandler는 실행되지 않으며 항상 반환 값이 없습니다.
내가 NSURLConnetion을 잘못 이해했거나 잘못 했나요?
어떤 조언을 주시면 감사하겠습니다.
편집
나는 코드가 (내가 그것을 어디다)
을 완료 심지어 내가 dispatch_async (dispatch_get_main_queue()에 포장하려고있는 viewDidLoad에서 다른 모든 코드 다음에 실행됩니다 발견,^{}, 즉시 내가 전화 할 때마다 작동 할 수 있는지? sendSynchronous 요청을?
그렇다면 completionHandler 내부의 코드는 nerver 실행 중입니까? 아니면 지연으로 실행 중입니까? 이는 비동기 요청이기 때문에 서버에서 응답을 받으면 작동하는 방식입니다. , completionHandler 블록이 실행됩니다. – gabuh
@gabuh 내부 코드가 실행됩니다 ...하지만 다른 코드를 실행하기 전에 완료해야합니다. 지금 동기 요청을 보내려고 ... 끔찍하게 내 프로그램을 붙어 :/ – bluenowhere
주 스레드에서 동기 요청을 보내는 것은 좋은 생각이 아닙니다. 비동기 요청을 처리하도록 코드를 구조화하는 방법을 생각해야합니다. 배열을로드하고 있으며 프로그램을 작동 시키려면 해당 배열이 필요합니다. 무엇을 사용하고 계십니까?, tableView로드? 당신은 그 배열의 내용에 의존하여 무엇이든 다시로드하기 위해 완성 블록에서 무엇인가를 트리거 할 수 있습니다. – gabuh