2012-07-26 1 views
1

내 응용 프로그램에서 NSOperation의 NSOperationQueue 백그라운드에서 여러 이미지를 다운로드 할 수 있습니다. 네트워크 연결이 손실되면 어떻게 될지 알고 싶었습니다. 데이터를 다운로드하는 동안 모든 것들이 대기열에있는 작업은 완료로 표시되어 대기열에서 제거되었습니다. 또는 대기열에 남아있을 것이고 네트워크가 다시 구축 될 때 다른 프로세스를 다운로드하기 시작할 것입니까?거대한 데이터를 다운로드하는 동안 NSOperation이 네트워크 연결 손실을 처리하는 방법은 무엇입니까?

NSOperationQueue가 이러한 시나리오에서 어떻게 작동하는지 설명 할 수 있습니까?

미리 감사드립니다.

답변

3

현재 NSOperation은 장애 신호를 수신 할 때 남겨진 논리를 그대로 유지 한 다음 정상적으로 종료되어 NSOperationQueue가 다음 NSOperation 실행을 시작하게합니다. 인터넷이 여전히 돌아 오지 않는다면, 네트워크가 다시 연결되는지 여부에 관계없이 대기열을 계속 이동하여 네트워크가 다시 연결되지 않는 한 모든 연결이 실패합니다.

고려해야 할 사항이 많으므로이 문제를 처리하는 데는 여러 가지 방법이 있습니다. 예를 들어, 네트워크 중단으로 인해 실패한 경우 NSOperation을 실패로 표시하고 실패한 NSOperations를 다시 대기열에 다시 추가하는 코드에 일부 논리를 넣을 수 있습니다. 그러나 네트워크가 오래 동안 유지된다면 어떨까요? 귀하의 구현은 이미지를 영원히 계속 다운로드하려고 할 것입니까, 아니면 다음 번에 해당 기능을 사용할 때까지 포기하기 전에 특정 파일을 몇 번 다시 다운로드하도록해야합니까?

NSOperation 자체가 NSURLConnection 등을 시작하기 전에 대기열에 NSOperation이 추가되기 전에 일련의 네트워크 도달 가능성 검사를 사용할 수도 있습니다. 실패 할 경우 NSOperation이 네트워크가 될 때까지 기다릴 수 있습니다. 다시 연결하고 계속하십시오. (그렇게하는 것이 이상적이지는 않지만 배경 스레드에서 실행하기 때문에 사용자의 앱 인터페이스를 적어도 고정시키지 않을 것입니다.)

원하는 경우 질문에 대해 질문 한 기능을 구현할 수도 있습니다. 즉, 네트워크가 중단되면 NSOperationQueue의 나머지 작업을 모두 취소하고 네트워크에 다시 들어올 때 다시 시도해야한다는 것을 사용자에게 알립니다. 그런 다음 해당 기능이 다음에 호출 될 때 남아있는 모든 NSOperations를 다시 추가하십시오.

+0

답장을 보내 주신 데 감사드립니다. 제 요구 사항에 따라 특정 시간 간격 후에 이미지를 다시 다운로드하기 때문에 네트워크가 없으면 NSOperation이 정상적으로 종료됩니다. –

관련 문제