3
我有我的應用程序NSURLSessionDownloadTask
問題,我創造幾百個下載任務,代碼:NSURLSession downloadTaskWithURL返回nill
NSURLSessionDownloadTask * task = [_urlSession downloadTaskWithURL:downloadUrl];
NSLog(@"session: %@, download task %@ for url: '%@'",_urlSession, task, downloadUrl);
if (!task)
{
NSLog(@"ooops no task");
}else
{
}
在Xcode控制檯我有這樣一個消息:
2014-03-28 11:23:39.297 MYAPP[3838:60b] session: <__NSCFURLSession: 0x19471e70>, download task (null) for url: 'http://xxx.cloudfront.net/seminarcontent/nsm_photos_11_24d8505e-4ddd-4e9b-baef-a90d5e322702.jpg'
此外,在主辦單位的控制檯我看到此消息:
nsnetworkd[322] <Error>: __NSCFLocalDownloadFile: error 2 creating temp file: /private/var/mobile/Applications/MYAPPGUID-BD21-4C5A-8DB6-845D80BE75E3/Library/Caches/com.apple.nsnetworkd/CFNetworkDownload_R91Hqn.tmp
NSURLSession create d與前:
_urlSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration backgroundSessionConfiguration:sessionIdenttificator] delegate:self delegateQueue:nil];
所有URL都是有效的,這隻有當我剛過應用程序啓動
請分享我的問題,你的想法開始發生下載。提前致謝。
更新:
我還添加了檢查的緩存目錄,肯定是存在之前,我開始下載,但什麼都沒有改變
編輯
其他信息,我不能重現的bug模擬器或在調試模式下的設備上(啓用斷點)。
nsnetworkd是代表您進行後臺下載的守護進程。它將下載的URL存儲在臨時/私人位置。它失敗了,因爲它無法創建存儲下載文件的臨時文件。錯誤2是'ENOENT',在這種情況下,這意味着該目錄不存在。是否有可能更改了您的應用ID?你在模擬器中。你爲什麼不實際調出一個終端並進入該目錄。另外,記錄您的應用程序真正使用的緩存目錄。也許守護進程和你的應用程序已經對應用程序ID感到困惑。 –
@JodyHagins謝謝關注我的麻煩。我以同樣的方式理解這個錯誤,但不知道爲什麼發生這種情況,我不改變bundleId,並且我不能在模擬器中重現這一點。 – sage444
因此,如果在設備上發生這種情況,它可能是一些錯誤或競爭條件。我從來沒有見過它發生。我建議你創建你的會話,然後調用'getTasksWithCompletionHandler:'。在完成處理程序中,忽略返回的任務......即使守護程序有任務...也很可能是空的,然後開始下載請求。這個調用至少應該與守護進程進行某種通信(或者一些共享的數據結構)。無論如何,回調將在會話的委託隊列中,並且可能會在啓動時避免這種競爭狀態。 –