1

サーバーから取得したデータを利用するアプリを使用しています。フェッチ ロジックはかなり堅牢で、フォールト トレラントです。ほとんどの接続エラーは自動的に再試行され、通常はうまく機能します。ただし、非常にまれな状況 (ネットワーク レイテンシとバックエンド データベースに関連する競合状態を含む) では、アプリ/サーバーが回復できない一貫性のない状態になる可能性があります。

私がやりたいのは、この状態のときに、ユーザーが次にホームボタンを押したときに(バックグラウンドに移動するのではなく)単純に終了するアプリを用意することです。アプリが再起動されると、サーバーと再同期され、ユーザーは自分の好きなように行動します。

私の最初の考えは、矛盾した状態が検出されたときに applicationDidEnterBackground から exit() を呼び出すことです。この種の経験がある人、または条件付きでバックグラウンドを無効にする別の方法を知っている人はいますか? これは嫌われていると思いますが、Apple が exit() の使用を検出してアプリを明示的に拒否した経験がある人はいますか? UIApplicationExitsOnSuspend = YES は、マルチタスクが他の 99.999% の時間で期待どおりに動作する必要があるため、オプションではありません。

注:詳細が不足していることをお詫びします。理想的な解決策は、一貫性のない状態から回復する方法を考え出すことです。そうする方法を見つけるのに多くの時間と労力が費やされたと私が言うとき、私を信じてください.

4

1 に答える 1

2

テクニカル Q&A QA1561exit()に従って、Apple は使用を強くお勧めしません。

警告: exit を呼び出してアプリケーションを終了することができます。exit を呼び出すアプリケーションは、正常な終了を実行してホーム画面に戻るのではなく、クラッシュしたように見えます。このような使用は否定的な経験をもたらすため、強くお勧めしません。

の使用はexit()、アサーションの失敗のように、クラッシュとして表示されるはずです。審査担当者がアプリケーションのテスト中にこの条件を満たした場合、そのアプリケーションは却下される可能性があります。

ただし、これが非常にまれなケースである場合は、サイコロを振って、レビュアーが遭遇しないことを祈ることができます。それはギャンブルであり、あなたはそれを回避できるかもしれませんが、それが最善の攻撃計画であるかどうかはわかりません.

この不一致を特定できれば、アプリケーションを新たに起動したときのように、すべてのインメモリ ストアを消去して効果的にゼロから開始することができなかった理由がわかりません。元に戻す/やり直し/元に戻すサイクルが原因で Core Data データベースの一貫性が失われるというまれなケースがありましたが、これはそれから回復するために行ったことです。

于 2010-12-31T22:14:55.350 に答える