2014-04-16 1 views
0

응답을 제공하는 데 약간의 시간이 걸리는 API를 요청 중이므로 그 시간 동안 다른 작업을 수행 할 수 없습니다. 예 : 뒤로 버튼 또는 탭이 눌러지지 않습니다. 나는 다음 코드를 사용하고있다 :iOS에서 가져 오기 요청을 실행하는 동안 애플리케이션이 멈춤.

NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration]; 

NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]]; 

NSURL * url = [NSURL URLWithString:urlString]; 
NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithURL:url 
                completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
                 if(error == nil) 
                 { 
                 }else{ 
                 } 
                }]; 

    [dataTask resume]; 

누구든지이 작업 중에 내 앱이 멈추는 이유를 제안 할 수있다. 미리 감사드립니다.

+0

문제가 해결되면 솔루션을 여기에서 공유하십시오. 이것은 다른 사람들에게도 도움이 될 것입니다. –

+0

관련 방법으로 무엇을하고 있습니까? 위의 코드는 모든 작업이 별도의 대기열에서 실행되므로 UI를 고정 할 수 없습니다. – HAS

답변

0

주 스레드에서 작업을 수행 중이므로이 스레드를 백그라운드 스레드에서 수행해야합니다.

이 경우 NSOperationQueue를 사용하고 api 호출 작업을 추가 할 수 있습니다. Multithreading and Grand Central Dispatch on iOS for Beginners Tutorial

012 :

는 벨로 링크

NSOperation and NSOperationQueue working thread vs main thread

How To Use NSOperations and NSOperationQueues

Working with the NSOperationQueue Class

또는 당신은 또한

참조 DispatchQueue을 사용할 수 있습니다 참조

+3

기본 네트워크 작업은 명시된대로 주 스레드에서 실행되지 않습니다. 지정된 큐에서 실행되는 것은 "위임 메소드"와 완료 핸들러뿐입니다. – CouchDeveloper

0

메인 스레드 swhich 인터럽트 응용 프로그램 실행에서 작업을 수행하고 있습니다. 백그라운드에서 데이터를 다운로드하라는 비동기 요청을 생성하여 GCD를 통해 백그라운드에서이 작업을 수행하면 앱 실행이 중단되지 않습니다.

+0

예를 들어 오류가 발생하지 않았으므로 로컬 URL에 대해서만이 작업을 수행해야합니다. 다운로드가 실패하면. – HAS

관련 문제