2014-01-14 48 views
2

我有一個iOS應用程序,可以從網站下載文件。我在類Downloads中創建了NSURLSession來管理它們。 Downloads類有一個NSMutableArray,它使用我的DownloadItem對象跟蹤所有當前和過去的下載。我對此設置不滿意。組織多個NSURLSessionTasks

目前,我必須有Downloads類作爲所有下載的代表。我看不到將每個NSURLSessionDownloadTask的代理人分配給DownloadItem對象的方法。所以,我必須保持它分配給我的Downloads對象,然後讓它找出哪個方向DownloadItem轉發消息。

目前我通過在Downloads中創建一個名爲tasksDictionary的NSMutableDictionary,並使用taskIdentifier作爲關鍵。

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

這似乎工作,但它似乎並不是最有效的方法。我還擔心我看到創建的第一個taskIdentifier是0,這將使難以辨別完成的任務和第一個任務之間的區別。

有沒有更好的方法來跟蹤這些事情?有沒有辦法爲任務分配一個新的委託?

回答

0

也許有這些高德:

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

完成時,彈出DownloadItemactiveDownloadTasks並將其添加到completedDownloads

否則你在做什麼聽起來很桃色。

雖然我吧,這句法可能會有所幫助(使用你的例子):

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

+0

這基本上是我在做什麼,但它是好的,有一個確認我做正確的事情。 –