0

ニューススタンドアプリを作成しています。ダウンロードする問題ごとに多くのダウンロードアセットがあります。「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メソッドも呼び出されません。それが問題です。資産はインターネットトラフィックとデバイスのストレージを消費します。

不要になったアセットのダウンロードを強制的にキャンセルするにはどうすればよいですか?

4

1 に答える 1

0

号ごとに非常に多くのアセットをダウンロードするのではなく、アセットを 1 つの zip フォルダーにアーカイブし、号に対応する zip ファイルをダウンロードします。

こうすることで、その号に必要なすべてのアセットを含む、ダウンロードする各号のファイルを 1 つだけ持つことができます。その後、解凍してアセットにアクセスできます。このようにして、問題とそのアセットを簡単に整理できます。

これがお役に立てば幸いです。

于 2013-06-11T08:17:16.847 に答える