2012-08-09 3 views
3

NKAssetDownload를 취소하고 다시 시도하는 방법을 누구에게 설명 할 수 있습니까?NKAssetDownload를 취소하면 다시 다운로드 할 수 없습니다. 어떤 해결책?

이 작동
[currentConnection cancel]; 

는, 그러나 NKAssetDownload가 NKIssue downloadingAssets 테이블에 남아 :

NKAssetDownload * download = [issue.downloadingAssets objectAtIndex:0]; 
currentConnection = [download downloadWithDelegate:self]; 

내가 다운로드를 취소하려면 :

현재이 시도. 다음 번에 같은 코드를 다시 다운로드하고 싶습니다. 같은 코드를 다시 실행합니다 (downloadWithDelegate). 그러나 이것은 아무 것도하지 않습니다. 마치 NKAssetDownload 인스턴스가 이전에 취소 한 NSURLConnection과 동일한 NSURLConnection을 사용하여 다운로드를 시작하지 않는 것입니다. 진짜 문제는 NKIssue에서 NKAssetDownload를 제거 할 수 없기 때문에 다운로드를 다시 시도하기 위해 동일한 URL을 가리키는 새 NKAssetDownload를 만들 수 없다는 것입니다. 라이브러리에서 NKIssue를 삭제하고 (모든 것을 버리고) 다시 작성하는 것 이외에는 다운로드를 취소하고 나중에 다시 시도 할 수있는 방법이 없다는 것을 알 수 있습니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까?

S.O.와 관련된 질문이 있습니다. Is it possible to cancel an NKAssetDownload?하지만 거기에 제공된 유일한 해결책은 NKIssue를 삭제하는 것이고, 그것은 내가하고 싶은 것이 아닙니다.

+0

은 내가 [이] (http://stackoverflow.com/questions/9615945/what-happened-after-nkissue-download-terminated-due-to-network-unavailability) 질문을 게시합니다. – msk

답변

0

뉴스 스탠드 다운로드 대기열은 Newsstand 프레임 워크에서 관리합니다. NKLibrary에서 NKIssue를 삭제하는 것을 제외하고는 개발자에게 다운로드 일시 중지/취소 권한이 없습니다.

아래의 NSURLConnectionDelegate 메소드를 구현하여 실패한 다운로드를 다시 시도 할 수 있습니다.

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 

나는 다운로드가 실패하고 nkIssue.downloadingAssets.count 불리는이 방법은 항상 0 인 경우 당신은 다시 문제의 자산을 추가 할 수 있습니다 다운로드를 시작할 수 있음을 확인.

NS 다운로드를 일시 중지하려면 아무 것도 없습니다. 다운로드를 취소하고 싶다면 NKLssue fron NKLibrary를 삭제하는 것이 좋습니다. 문제는 없습니다. 언제든지 NKIssue를 다시 추가하고 나중에 언제든지 다운로드를 시작할 수 있습니다.

+0

"didFailWithError를 사용할 수 있습니까?"라는 의미는 무엇입니까? 어떻게 사용합니까? 난 그냥 사용자가 다운로드를 취소 할 수 있기를 바랍니다. –

+0

내 대답이 업데이트되었습니다. – msk

0

문제를 "재설정"하는 것이 더 좋습니다. 왜냐하면 NSURLConnection을 취소 할 때 문제 상태가 업데이트되지 않고 영원히 "다운로드 중"이기 때문입니다. 그리고 NSURLConnection에 대한 포인터도 필요하지 않습니다.

참고 : 이로 인해이 문제와 관련된 모든 다운로드가 삭제됩니다.

-(NKIssue*) resetIssue:(NKIssue*)issue{ 
    NSString* issueName = [issue name]; 
    NSDate* issueDate = [issue date]; 
    NKLibrary * lib = [NKLibrary sharedLibrary]; 
    [lib removeIssue:issue]; 
    return [lib addIssueWithName:issueName date:issueDate]; 
}