NSOperationQueueを実装したアプリに問題があります。iPadの閉じるボタンを押すとUIがフリーズするようです。アプリ自体はまだバックグラウンドで実行されており、UIが更新されています。タッチや回転に応答しなくなり、本来のように閉じられなくなります。
非常に長いxmlファイルのリストをダウンロードしてデバイスに保存する更新モジュールがあります。操作キューのMaxConcurentOperations値は2です。通常、すべてが正常に機能し、アプリは正常に動作し、デバイスのボタンを押すまで、タッチと回転に応答します。この後、UIは単にフリーズします。進行状況は引き続き更新され(UILabel)、繰り返しのアニメーションは引き続き表示されますが、すべての操作が完了するまでアプリは閉じられません。
キューでwaitUntilAllOperationsAreFinishedを呼び出していないので、これが何を引き起こしているのかわかりません。これまでのところ、iOs5.0を搭載した第1世代のiPadでのみテストを行っています。
誰かが私にいくつかのヒントを提供してくれるなら、私はそれを本当に感謝します。必要に応じて、NSOperationQueueおよびNSOperationクラスコードを投稿できますが、コードの行の誤りではなく、これに誤ってアプローチしていることをどういうわけか感じています。
[編集]タイマーを使ってダウンロード状況を定期的にチェックしていますが、タイマーを呼び出さなくても問題が解決しないことに気づきました
self.timer = [NSTimercheduledTimerWithTimeInterval:2.0 target:selfセレクター:@selector(xmlDownloaded)userInfo:nil repeats:YES];
[edit2]さらに調査した後、操作が並行していることを確認しました。念のため、操作をキューに追加する方法を変更しました。それ以外の
[downloadQueue addOperation:op];
それらを「operations」と呼ばれる可変配列に追加し、最終的に使用しました
[downloadQueue addOperations:operations waitUntilFinished:NO];
しかし、閉じるボタンを押すとアプリがフリーズします...