2

Web サイトからファイルをダウンロードできる iOS アプリがあります。それらを管理するNSURLSessionクラスを作成しました。DownloadsこのDownloadsクラスにはNSMutableArray、オブジェクトを使用して現在および過去のすべてのダウンロードを追跡する がありDownloadItemます。私はこの設定に満足していません。

Downloads現在、すべてのダウンロードのデリゲートとしてクラスを持たなければなりません。NSURLSessionDownloadTaskそれぞれのデリゲートをDownloadItemオブジェクトに割り当てる方法がわかりません。Downloadsそのため、それをオブジェクトに割り当てたままにDownloadItemし、メッセージを転送する方法を決定する必要があります。

現在、これを行うには、で呼び出される NSMutableDictionary を作成しtasksDictionary、をキーとしてDownloads使用しtaskIdentifierます。

return [self.tasksDictionary objectForKey:[NSNumber numberWithInteger:task.taskIdentifier]];

これは機能しているように見えますが、最も効率的な方法ではないようです。また、最初に作成された taskIdentifier が0、完了したタスクと最初のタスクの違いを識別するのが難しくなるのを見たことも心配しています。

これらのことを追跡するためのより良い方法はありますか? タスクに新しい代理人を割り当てる方法はありますか?

4

1 に答える 1

0

おそらくこれらのivarがあります:

NSMutableArray *completedDownloads;
NSMutableDictionary *activeDownloadTasks; // @(taskID) => DownloadItem

終了したら、DownloadItemfromをポップしてactiveDownloadTasksに追加しcompletedDownloadsます。

そうでなければ、あなたがやっていることは桃色に聞こえます。

私はそれに取り組んでいますが、この構文が役立つ場合があります(例を使用):

return self.tasksDictionary[@(task.taskIdentifier)];

于 2014-02-10T20:37:27.937 に答える