私は、ユーザーが適度なサイズのデータベースをオンラインで取得し、オフラインで作業している iOS アプリに取り組んでいます。デバイスのメモリの制約とトランザクション挿入の処理方法により、更新と同期には約 10 ~ 15 分かかります。その間ずっと、進行状況をユーザーに通知するダイアログ ビューを開いて、データベースへの変更をキャンセルして元に戻すオプションをユーザーに提供します。
とにかく、今日のテスト中に、iTunes アプリがサーバーとして接続してバックグラウンド作業を実行しようとしていることに気付きましたが、エラーがスローされました。
itunesstored[68] <Warning>: Could not load download manifest with underlying error:
Error Domain=NSURLErrorDomain Code=-1001 "Cannot connect
to 112.168.198.2" UserInfo=0x1f8d6150
{NSLocalizedDescription=Cannot connect to 112.168.198.2}
これにより、既に表示されていたダイアログの上にダイアログが表示され、iTunes が接続できなかったことをユーザーに通知しました。
「閉じる」ボタンをクリックすると、どういうわけかダイアログも閉じられ、ユーザーが更新を停止することを決定したときにアクションの一部のみが実行されます。非同期更新はバックグラウンドで続行されましたが、データベースが変更を元に戻そうとしたため、データベースがロックされたため、プロセスを強制終了してアプリを再起動し、更新する必要がありました。設計上、このようなひどいことが起こった場合、すべてが元に戻ります。
データベースがそのようにロックアップしにくくするために、コードにいくつかの変更を加える必要があることに気付き、現在取り組んでいます。しかし、私が知りたいのは、アプリで特定の重要なプロセスが行われている間、iTunes やその他のプロセスが UI スレッドで何らかの作業を行うことを禁止することは可能ですか?
iTunes のダイアログ キャンセル ボタンの動作、つまり、ダイアログに反映されることは、正常または合理的とは見なされません。