2014-12-23 2 views
0

NSURLConnection을 사용하여 서버에 대한 긴 폴링 연결을 설정하고 때로는 연결을 취소하고 다시 연결하려고합니다. 처음에 나는이취소 한 후 즉시 NSURLConnection이 작동하지 않고

[self.connect cancel]; 
self.connect = [NSURLConnection connectionWithRequest:request delegate:self]; 
[self.connect start]; 

같은 코드를 작성하지만이 & 시작을 취소 한 후 연결 대리인이 더 이상 호출 할 수 없습니다 발견했다. 는 그래서

[self.connect cancel]; 
dispatch_async(dispatch_get_main_queue(), ^{ 
    self.connect = [NSURLConnection connectionWithRequest:request delegate:self]; 
    [self.connect start]; 
}); 

그리고 모든이 시간에 좋은 작품을 보인다 파견을 사용하지만, 난 (파견 없음) 첫 번째 선택이 작동하지 않는 이유를 모르겠다 아직도?

답변

0

NSURLConnection에는 작동을위한 런 루프가 필요하며 기본적으로 메인 스레드에 하나가 있습니다.

메인이 아닌 스레드에서 연결을 실행 한 경우에는 직접 제공해야합니다.

조작 대기열을 NSURLConnection으로 조사하는 것이 좋습니다 (예를 들어, 위임 자의 NSOperationQueue을 설정하거나 특정 대기열에서 비동기 연결을 시작할 수 있음).

+0

미안하지만,이 행을 "(예를 들어, 대리자의 NSOperationQueue를 설정하거나 특정 대기열에서 비동기 연결을 시작할 수 있음) 이해했습니다."라는 뜻입니다. 위에서 사용 된 gcd i가 작업 대기열을 사용하도록 변경되었습니다. ? – ximmyxiao

+0

@ximmyxiao 네, 그건 단지 오도 된 것입니다 (나는 정정 할 것입니다). – Droppy