2

我有一个可以从网站下载文件的 iOS 应用程序。我NSURLSession在课堂上创建了一个Downloads来管理它们。该类Downloads有一个使用我的对象NSMutableArray跟踪所有当前和过去的下载。DownloadItem我对这个设置不满意。

目前,我必须让Downloads班级作为所有下载的代表。我看不到将每个委托分配NSURLSessionDownloadTask给一个DownloadItem对象的方法。所以,我必须将它分配给我的Downloads对象,然后让它找出DownloadItem将消息转发到的方式。

tasksDictionary目前,我通过在 中调用 NSMutableDictionaryDownloads并将taskIdentifier用作键来做到这一点。

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

这似乎有效,但似乎不是最有效的方法。我还担心我看到创建的第一个 taskIdentifier0会让人很难区分已完成的任务和第一个任务之间的区别。

有没有更好的方法来跟踪这些事情?有没有办法为任务分配新的代表?

4

1 回答 1

0

也许有这些 ivars:

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

完成后,弹出DownloadItemfromactiveDownloadTasks并将其添加到completedDownloads.

否则你在做什么听起来很漂亮。

当我这样做时,这种语法可能会有所帮助(使用您的示例):

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

于 2014-02-10T20:37:27.937 回答