ニューススタンドアプリを作成しています。ダウンロードする問題ごとに多くのダウンロードアセットがあります。「issues」は、サーバーから要求されたNSArray*です。MyDownloaderクラスで次のようなすべてのアセットを反復処理してダウンロードを開始します。
for (int i=0; i< issues.count; i++)
MyIssue *currentIssue = [issues objectAtIndex:i];
NSString *filename = [currentIssue.remotePath lastPathComponent];
NSString *localFilepath = [cache.cachePath stringByAppendingString:filename];
//skip downloaded file
if ([[NSFileManager defaultManager] fileExistsAtPath:localFilepath]) {
continue;
}
NSURL *downloadURL = [NSURL URLWithString:currentIssue.remotePath];
// let's create a request and the NKAssetDownload object
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:downloadURL];
NKAssetDownload *assetDownload = [nkIssue addAssetWithRequest:req];
[assetDownload setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:
localFilepath, @"Filepath",
nil]];
// let's start download
[assetDownload downloadWithDelegate:self];
}
後でconnection:didFinishDownloading:destinationURLメソッドで使用するためにlocalFilepathを保存しています。
1つを除いて、すべてが正常に機能しています。これが私がapplication:didFinishLaunchingWithOptions:メソッドに入れたコードです
NKLibrary *nkLib = [NKLibrary sharedLibrary];
for(NKAssetDownload *asset in [nkLib downloadingAssets]) {
NSLog(@"Asset to download: %@",asset);
MyDownloader *downloader = [MyDownloader sharedDownloader];
[asset downloadWithDelegate:downloader];
}
これも問題なく動作します。しかし、キューに入れられたすべてのダウンロードをキャンセルする必要がある場合は、application:didFinishLaunchingWithOptions:から前のコードをコメントアウトします。次のようなログメッセージが表示されます。
NewsstandKit: cleaning up abandoned asset downloads: (
"<NKAssetDownload: 0xa17ffe0> -> {identifier: '98E98868-0DD2-45FF-90B8-7CF80E02A952/B11F6C43-86CC-4434-ABC1-F4450FF163CF' request: <NSMutableURLRequest http://servername/serverpath/file.zip> downloading: NO}"
そして、私はすべてのダウンロードがキャンセルされることを期待しています。しかし、アプリケーションのLibrary / Cacheディレクトリを見ると、「bgdl-2896-」などで始まるファイル名でダウンロードされているファイルがたくさんあります。したがって、キャンセルされることはなく、NewsstandKitによってダウンロードされます。connection:didFinishDownloading:destinationURLメソッドも呼び出されません。それが問題です。資産はインターネットトラフィックとデバイスのストレージを消費します。
不要になったアセットのダウンロードを強制的にキャンセルするにはどうすればよいですか?