2012-11-15 5 views
0

내가 작업하는 OS X 응용 프로그램의 주요 구성 요소 중 하나는 NSURLDownload를 기반으로 구축 된 다운로드 시스템입니다.NSURLDownload downloadDidFinish : 너무 일찍 호출했습니다.

대다수의 사용자 (내부 개발 팀은 물론)는 파일 다운로드와 관련하여 아무런 문제가 없습니다. 그러나 전 세계적으로 무작위 사용자 비율이 1 ~ 2 %로 낮은 것으로 나타났습니다. 이러한 사용자의 경우 다운로드가 완료되기 전에 NSURLDownload의 downloadDidFinish : delegate 메서드가 호출됩니다. 예를 들어, 사용자가 5GB 파일을 다운로드하려고 시도하면 downloadDidFinish :는 3.5GB의 데이터가 전송 된 후 호출되어 불완전한 파일이 생성 될 수 있습니다. 분명히 이것은 사용자들에게 많은 좌절감을 안겨줍니다.

우리는이 문제에 많은 시간을 할애했지만 많은 진전을 이루지 못했습니다. 우리는 OS X (잘못?)가 downloadDidFinish를 너무 일찍 호출하는 경우가 하나 이상 있다는 것을 알았습니다. Mac이 여유 공간이 부족할 때입니다. 이것은 왜 이상하지 않은가? 왜냐하면 didFailWithError : delegate 메서드를 대신 호출해야하는 이유는 무엇인가? 그러나 다운로드가 불완전한 대다수의 사용자는 디스크 공간이 충분하므로 디스크 공간이 부족하다고 생각하지 않습니다.

그래서 내 질문에 : 당신은 왜 NSURLDownload downloadDidFinish : 다운로드가 완료되기 전에 호출 할 수 있습니다 이유는 디스크 공간 이외의 어떤 이유를 알고 계십니까? 당신이 우리에게 줄 수있는 조언을 주셔서 감사합니다.

+0

소스에 링크 오류가 있거나 인터넷 연결이 끊어 질 수 있습니다. –

+0

우리는 시뮬레이션 오류 (인터넷 끊김 등)를 시도했으며 다운로드 결과 didFailWithError : 호출 중입니다. downloadDidFinish : 호출 중일 수있는 특정 네트워크 오류를 알고 있습니까? – philbert1

답변

0

위의 Anoop의 제안은 정확합니다. 우리는 드로잉 보드로 돌아가 시뮬레이션 된 서버 쪽 연결이 이전보다 더 잘 끊어졌습니다. 우리는 이렇게함으로써 클라이언트 소프트웨어가 NSURLDownload : downloadDidFinish : notifications를 수신한다는 것을 알았습니다.

개인적으로 OS X에서 NSURLDownload 객체에 "finish"("실패"가 아닌) 알림을 보내는 것이 이상하다고 생각합니다. 그러나 그것이 애플이 일하기를 원하는 방식이라고 생각한다.

관련 문제