3
- (NSURLSession *)sharedBackgroundSession
{
    static NSURLSession *sharedBackgroundSession = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.example.apple-samplecode.SimpleBackgroundTransfer.BackgroundSession"];
        configuration.URLCache = [NSURLCache sharedURLCache];
        configuration.requestCachePolicy = NSURLRequestReturnCacheDataElseLoad;
        sharedBackgroundSession = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
    });
    return sharedBackgroundSession;
}

// When executed on simulator, things work as expected, I never get a nil result.
// When executed on iPhone 5s device, nextDownloadTask is always nil
NSURLSessionDownloadTask *nextDownloadTask = [[self sharedBackgroundSession] downloadTaskWithRequest:request];

何か案は?

更新 9/12/14: この問題が再び発生し、グーグルで検索してこの SO 投稿を見つけたところ、私が質問の作成者であることがわかりました! 今回-URLSession:task:didCompleteWithErrorは呼ばれることすらありませんでした。解決策は、電話を再起動することでした。これは Apple のバグに違いありません。iPhone 5sでiOS7を実行しています。

4

4 に答える 4

1

実装する必要がURLSession:task:didCompleteWithError:あり、意味のあるエラーがあれば報告する必要があります。

デバイスではなくシミュレーターで機能する種類の問題に関しては、(a) URL での localhost の使用。(b) LAN および iOS デバイスでのみ使用可能な URL の使用が Wi-Fi 経由で正常に接続されていない。たとえば、セルラー経由でのみ接続している可能性があります。など。接続先の URL の種類について詳しく共有する必要があります。

ドキュメントによると、NSURLErrorDomainエラー-999NSURLErrorCancelled. リクエストを明示的にキャンセルしたり、セッションを無効にしたりしない限り、このコンテキストで特定のエラーが発生する理由は不明です。

于 2014-03-01T16:27:45.197 に答える
0

を呼び出してこれを修正しました[backgroundSession invalidateAndCancel]。これを一度だけ呼び出す必要があり、その後コードを削除しました。

タスクを作成できなくなったことを検出して、タスクをinvalidateAndCancel試行する前に呼び出す必要があるかどうか疑問に思っています。

于 2014-05-09T20:36:56.227 に答える