0

私は、ユーザーが適度なサイズのデータ​​ベースをオンラインで取得し、オフラインで作業している 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 のダイアログ キャンセル ボタンの動作、つまり、ダイアログに反映されることは、正常または合理的とは見なされません。

4

1 に答える 1

0

いいえ、これは不可能です。アプリは、この種の中断を考慮してコーディングする必要があります。たとえば、iPhone で電話がかかってきたらどうなるでしょうか。それに対処するのはアプリの責任です。システムは、「重要なプロセス」に関係なく、通話を許可します。

一般的に、あなたのアプリは最適な方法で設計されていないようです。たとえば、1 つのデータベースを解析するのに 10 分間は非常に長いように思えます — このデータベースにはいくつのレコードがあるでしょうか? iPhone では、100,000 レコードのデータベースを数秒でインポートできるはずです。

于 2013-01-22T12:57:24.743 に答える