斯く斯く然々やんごとなき理由により、GCDのディスパッチキューに入れたブロックの中で、NSURLConnectionクラスの同期通信メソッド(sendSynchronousRequest:returningResponse:error:とか)を使ってしかもコンテンツダウンロードの進捗状況を監視する必要に迫られました。
素直に非同期通信のメソッドを使えばいいじゃないかという話もありますが、通信を含んだ前後延々と続く一連の処理が細切れに呼ばれると困るので…。と言うわけで試行錯誤した結果、とりあえずそれっぽく動く物が出来上がったのでソースコード一式を github に置いておきます。
使い方は、
URLConnection *connection = [[URLConnection alloc] init];
NSHTTPURLResponse *response = nil;
NSError *error = nil;
NSData *result = [connection sendSynchronousRequestWithProgressReport:request returningResponse:&response error:&error progressHandler:^BOOL(float progress) {
return YES;
}];
な感じ。
全然関係ないですが、Xcode 5で作ったプロジェクトをダブルクリックして開こうとしたときに、Xcode 6 ベータ版を別にインストールしてあると、そのベータ版が優先的に起動するので困ります。