2012-11-06 2 views
6

사용자가 iPad 화면을 잠그고 잠금 해제 할 때 어떤 일이 일어나고 있는지 알고 싶습니다. NSURLConnection을 사용하여 파일을 다운로드하는 앱이 있는데 다운로드가 SOAP 오류 ("지정한 호스트 이름이있는 서버를 찾을 수 없습니다")와 함께 실패하지만 사용자가 화면을 잠글 때 잠금을 해제 할 때가 아닙니다. 오류가 팝업되는 것과 관계없이 다운로드가 완료되지 않습니다. 왜 어떤 아이디어가 있고 그것에 대해 무엇을 할 수 있습니까?화면 잠금 인터럽트 NSURLConnection

applicationWillResignActive 
applicationDidEnterBackground 

를 내가 3 분 후에 응용 프로그램을 기억 한 후 내가 얻을 : 내가 홈 버튼을 쳤을 때 내가 무엇을 말할 수에서

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:300]; 

NSURLConnection* conn = [[NSURLConnection alloc] initWithRequest: request delegate: self]; 

내가 얻을

applicationWillEnterForeground 

과를 다운로드가 이미 완료되었거나 백그라운드에서 진행 중입니다.

배경을 길게 (5 분) 남겨두면 오류가 발생하여 시간이 초과됩니다.

화면을 잠그면 응용 프로그램 상태가 같지만 다운로드 연결 해제에 대한 오류 메시지가 나타납니다.

감사합니다.

+0

나는이 문제에 대한 우아한 해결책을 찾고 있습니다. 연결을 취소하는 것을 포함하지 않는 것이 좋습니다. – Snips

답변

6

내 생각에 앱이 백그라운드로 들어가고 앱을 계속 실행하기위한 올바른 구현이없는 경우 연결이 끊어지고있는 것 같습니다. 어쩌면 애플의 Background Execution and Multitasking 문서를 살펴 봐야 할 것입니다. 백그라운드에서 앱을 종료하지 않고 약 10 분 동안 실행하는 방법을 보여줍니다. 다음 예제 코드를보고 문제를 해결할 수있는 방법을 알아보십시오.

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ 
     // Clean up any unfinished task business by marking where you. 
     // stopped or ending the task outright. 
     [application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 

    // Start the long-running task and return immediately. 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

     // Do the work associated with the task, preferably in chunks. 

     [application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }); 
} 
+0

감사합니다. 이것은 유망 해 보입니다. – TrekOnTV2017

+0

왜 즉시 반환합니까? 그렇다면 인터넷과 어떻게 계속 연결됩니까? – Shamsiddin

+0

@yeesterbunny이 방법을 사용하는 방법? 백그라운드에서 일하고 싶은 앱에서이 bgTask를 사용해야합니까? – user2545330