3

NKAssetDownload をキャンセルして再試行する方法を誰か説明してもらえますか?

現在、私はこれを試しました:

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

ダウンロードをキャンセルするには、次のようにします。

 [currentConnection cancel];

これは機能しますが、NKAssetDownload は NKIssuedownloadAssets テーブルに残ります。次回同じ問題をダウンロードするときは、同じコードを再度実行します ( downloadWithDelegate )。ただし、これは何もしません。NKAssetDownload インスタンスは、以前にキャンセルしたのと同じ NSURLConnection を引き続き使用しているように見えるため、ダウンロードは開始されません。本当の問題は、NKAssetDownload を NKIssue から削除できないため、同じ URL を指す新しいものを作成してダウンロードを再試行できないことです。私が知る限り、ダウンロードをキャンセルして後で再試行する方法はありません。ライブラリから NKIssue を削除して (すべて破棄します)、再作成する以外に方法はありません。誰もこれを行う方法を知っていますか?

関連する質問があります SO Is it possible to cancel an NKAssetDownload? しかし、提供されている唯一の解決策は NKIssue を削除することであり、それは私がやりたいことではありません。

4

2 に答える 2

0

Newsstand のダウンロード キューは、Newsstand フレームワークによって維持されます。開発者がダウンロードを一時停止/キャンセルすることはできません (NKLibrary から NKIssue を削除する場合を除く)。

以下の NSURLConnectionDelegate のメソッドを実装して、失敗したダウンロードを再試行できます。

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

ダウンロードが失敗した場合、nkIssue.downloadingAssets.count と呼ばれるこのメソッドが常に 0 であることを確認しました。問題のアセットを再度追加して、ダウンロードを開始できます。

NS ダウンロードを一時停止したい場合は、残念ながら仕方がありません。ダウンロードをキャンセルしたい場合は、NKLibrary から NKIssue を削除するしかありませんが、これで問題ないと思います。いつでも NKIssue を再度追加して、後でいつでもダウンロードを開始できます。

于 2012-08-09T19:07:12.430 に答える
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];
}
于 2014-02-26T17:54:18.013 に答える