3

アプリで問題が発生しNSURLSessionDownloadTask、コードで数百のダウンロード タスクを作成します。

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:

_urlSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration  backgroundSessionConfiguration:sessionIdenttificator] delegate:self delegateQueue:nil];

すべての URL が有効で、これはアプリの起動直後にダウンロードを開始した場合にのみ発生します

私の問題についてあなたの考えを共有してください。前もって感謝します。

アップデート:

ダウンロードを開始する前にキャッシュディレクトリが存在することを確認しましたが、何も変更されていません

編集

追加情報: シミュレーターまたはデバッグ モードのデバイス (ブレークポイントが有効) でバグを再現できません。

4

1 に答える 1

1

最後に、数日間のデバッグの後、部分的な解決策が見つかりました。

  @synchronized(_urlSession)
  {
      task = [_urlSession downloadTaskWithURL:downloadUrl];
  }

コードにロックを追加したところ、すべてが正常に機能するようになりましたが、これは問題を回避するための単なる解決策ではないと思います。

非常に役立つコメントをくれた @Jody Hagins に感謝します。

于 2014-04-03T08:07:58.397 に答える