我有一个iOS应用程序,可以从网站下载文件。我已经在NSURLSession
类中创建了一个Downloads
来管理它们。 Downloads
类具有NSMutableArray
,可使用DownloadItem
对象跟踪所有当前和过去的下载。我对此设置不满意。
当前,我必须以Downloads
类作为所有下载的委托。我看不到将每个NSURLSessionDownloadTask
的委托分配给DownloadItem
对象的方法。因此,我必须将其分配给我的Downloads
对象,然后让它确定使用DownloadItem
将消息转发到的方式。
目前,我是通过在tasksDictionary
中创建一个名为Downloads
的NSMutableDictionary并使用taskIdentifier
作为键来实现的。
return [self.tasksDictionary objectForKey:[NSNumber numberWithInteger:task.taskIdentifier]];
这似乎可行,但似乎不是最有效的方法。我还担心我看到创建的第一个taskIdentifier是
0
,这将使得很难分辨完成的任务与第一个任务之间的区别。有更好的方法来跟踪这些事情吗?有没有办法为任务分配新的委托?
最佳答案
可能有这些错误:
NSMutableArray *completedDownloads;
NSMutableDictionary *activeDownloadTasks; // @(taskID) => DownloadItem
完成后,从
DownloadItem
弹出activeDownloadTasks
并将其添加到completedDownloads
。否则,您正在做的事情听起来很桃红色。
当我使用它时,此语法可能会有所帮助(使用您的示例):
return self.tasksDictionary[@(task.taskIdentifier)];
关于ios - 组织多个NSURLSessionTask,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21126503/