별도의 스레드에서 NSURLConnection을 실행하고 있습니다. (비동기이며 기본 스레드에서 실행 중임을 알고 있습니다.)하지만 NSURLConnection을 호출 할 때도 대리자 호출을하지 않습니다. 부모 스레드를 델리게이트로 전달하십시오. 누구든지이 작업을 수행하는 방법을 알고 있습니까?별도의 스레드에서 비동기 NSURLConnection이 대리자 메서드를 호출하지 못했습니다.
코드 :
-(void)startConnectionWithUrlPath:(NSString*)URLpath {
//initiates the download connection - setup
NSURL *myURL = [[NSURL alloc] initWithString:URLpath];
myURLRequest = [NSMutableURLRequest requestWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];
[myURL release];
//initiates the download connection on a seperate thread
[NSThread detachNewThreadSelector:@selector(startDownloading:) toTarget:self withObject:self];
}
-(void)startDownloading:(id)parentThread {
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
[NSURLConnection connectionWithRequest:myURLRequest delegate:parentThread];
//The delegate methods are setup in the rest of the class but they are never getting called...
[pool drain];
}
편집 *
내 아이폰 앱의 항목을 다운로드하고 있기 때문에 별도의 스레드에있는 NSURLConnection를 실행해야하는 이유는 다운로드가 때 취소 사용자가 화면을 잠급니다 (사용자가 간단히 홈 버튼을 누르고 앱이 백그라운드로 들어가면 계속됩니다). 이 문제는 메인 스레드에서 비동기 적으로 연결을 실행했기 때문에 발생하는 것으로 알고 있습니다.
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:myURLRequest delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[connection start];
[connection release];
를하지만 나는 화면 잠금이 취소되고 다운로드에 대한 이와 같은 문제가 있습니다 :
있는 NSURLConnection을 시작할 때 나는 또한 (NOT 별도의 스레드에서)이 코드를 시도했습니다.
* UPDATE
(제임스 웹스터의 대답은 스레드의 출사에 대하여도 정확하다는 것을 유의하시기 바랍니다) 애플 문서 설명 아래 토마스 '대답에 추가하려면 : "일시 중단 상태 -이 앱은에 백그라운드는 코드를 실행하지 않습니다. 시스템은 앱을 자동으로이 상태로 옮기고 그렇게하기 전에 알려주지 않습니다. 일시 중지 된 상태에서 앱은 메모리에 남아 있지만 코드는 실행하지 않습니다. "
사용자가 화면을 잠그면 앱이 백그라운드 상태가되고 즉시 일시 중지 상태가되므로 모든 실행이 중단되어 다운로드가 중단되고 경고 메시지가 표시되지 않습니다. 사용자가 화면을 잠 갔지만 아직 화면을 찾지 못했다는 알림이있을 수 있습니다.
따라서 앱이 백그라운드로 들어가면 일시 중지 (특정 정보를 저장하고 NSURLConnection을 취소)하여 다시 다운로드 할 때 HTTP Range 헤더로 다시 시작합니다. 이것은 사용자 환경에 부정적인 영향을주는 백그라운드에서 다운로드가 발생하지 않기 때문에 좋지만 이상적이지 않은 해결 방법입니다.
NSURLConnection 요청에 사용하는 메서드는 비동기이므로 새 스레드를 분리하지 않아도 다중 스레드 작업이 수행됩니다. – Ravin
수정 된 질문은 내 문제를 더 잘 설명합니다. – Zigglzworth