2014-03-28 1 views
0

특정 작업이 완료되기를 기다리는 방법은 무엇입니까?Xcode에서 작업이 완료 될 때까지 기다림

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:stringURL]]; 

if (!data) { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%@", NOCONNECTIONALERTTITLE] message:[NSString stringWithFormat:@"%@", NOCONNECTIONALERTMESSAGE] delegate:self cancelButtonTitle:[NSString stringWithFormat:@"%@", NOCONNECTIONALERTCANCELBUTTON] otherButtonTitles:nil, nil]; 
    [alert show]; 
} else { ... } 

if은 항상 false입니다 데이터도 초기화하기 전에 호출 이후 :

이 내가 할 노력하고있어 것입니다. 나는 연결이 확립되었음을 100 % 확신한다.

프로그래밍 방식으로 인터넷 연결을 확인하기위한 쉬운 대안으로 사용하고 싶습니다.

답변

2

dataWithContentsOfURL:은 블로킹 호출이므로 사용하려고하면 data이 초기화됩니다. URL이 nil이면로드하려는 URL에 문제가있을 가능성이 큽니다.

차단 중이기 때문에 주 스레드에서 사용하지 않아야합니다. 그리고 일반적으로 완료를 기다리는 것을 원하지 않아야합니다. 네트워크 작업의 비동기 특성을 수용하고 적절한 비동기 API 및 디자인을 사용하여 처리해야합니다.

만들고있는 NSURL을 기록하여 존재하는지 확인하십시오 (수정하지 않는 경우 수정하십시오). 비동기 다운로드를 실행하고 결과를 처리하기위한


귀하의 간단한 방법은 NSURLConnection +sendAsynchronousRequest:queue:completionHandler:을 사용하는 것입니다. 대기열을 [NSOperationQueue mainQueue]으로 지정하여 콜백이 기본 스레드에서 실행되고 UI를 업데이트 할 수 있습니다.

+0

바로 너! 내 잘못이야! ios에서 비동기 작업에 대해 자세히 설명해 주시겠습니까? – Philip

+0

답변에 간단한 옵션이 추가되었습니다. 요청과 응답이 무엇이고 결과로 무엇을 할 것인지에 대한 세부 사항에 따라 많은 옵션이 있습니다 ... – Wain

+0

기본적으로 특정 URL에서 JSONArray를 가져 오는 작업입니다. – Philip