1

バックグラウンド スレッドでダウンロードを実行しようとしています。このために、NSOperationQueue のインスタンスを作成し、それに NSInvocationOperation のインスタンスを追加しました。

        operationQueue = [NSOperationQueue new];
        // set maximum operations possible
        [operationQueue setMaxConcurrentOperationCount:1];

        NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
                                                                                selector:@selector(startBackgroundThread:)
                                                                                  object:data];

        [operationQueue addOperation:operation];
        [operation release];

startBackgroundThread で、新しい NSURLConnection を作成し、それに対して operationQueue をディスパッチしました。

    currentConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
    if (self.operationQueue) {
        [currentConnection setDelegateQueue:self.operationQueue];
    }        
    [currentConnection start];

iOS6 での動作

iOS6で正確に動作します。スレッドが作成され、NSURLConnection コールバックが同じバックグラウンド スレッドに委任されます。

iOS5 および iOS5.1 での動作

スレッドは作成されますが、NSURLConnection デリゲートは呼び出されませんでした。

iOS5 で考慮する必要があるものを見逃していますか? Apple が提供するドキュメントを読みましたが、それに関連するものは何も記載されていません。

4

2 に答える 2

1

これは iOS 5 の既知の問題です。http://openradar.appspot.com/10529053を参照してください。

于 2013-04-09T21:54:44.277 に答える
0

バックグラウンド Web リクエストを実行しようとしている場合は、次の便利な方法を使用してください。

[NSURLConnection sendAsynchronousRequest: キュー: completionHandler:];

ブロック API はより優れたパフォーマンスを提供し、Apple によって推奨されています。

于 2013-01-15T11:47:24.937 に答える