バックグラウンド スレッドでダウンロードを実行しようとしています。このために、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 が提供するドキュメントを読みましたが、それに関連するものは何も記載されていません。