UIManagedDocument 経由でアクセスする Core Data コンポーネントを含む iOS アプリに、状態の保存と復元のサポートを追加しようと試みています。
ビューコントローラーに復元識別子を追加し始めており、AppDelegate とコントローラー内に必要な関数 (現在は空) を接続しています。
複数のView Controllerによって参照される可能性のあるオブジェクトがあるため、AppDelegate内でこれを保存および復元し、関連するView ControllerにAppDelegateからオブジェクトを取得させるだけです。アプリのデリゲート メソッド didRecodeRestorableState は、すべてのビューが独自の decodeRestorableStateWithCoder メソッドを呼び出した後に発生するため、タイミングが難しい場合があります。
私の主な問題は、この共有クラスと複数の ViewControllers がすべて NSManagedObject プロパティを保持および復元したいということです。これを容易にするためにオブジェクトの URIRepresentation を使用できるようにしたいと考えていますが、問題は、AppDelegate が AppDelegate の willFinishLaunchingWithOptions メソッド内で UIManagedDocument を開くことです。これは、UIManagedDocument openWithCompletionHandler メソッドを介して行われます。このオープニングのスレッドにより、すべてのビューとアプリ デリゲートが保存された状態を復元しようとした後、ドキュメントが正常に開かれます。ドキュメントが使用可能になると、AppDelegate は通知を送信するため、すべてのビュー コントローラーがこの通知をリッスンできます。
私は、これがこれに対処するための最善の戦略なのか、それとも唯一の戦略なのか疑問に思っています。私のオブジェクトは、復元する URIRepresentations を保持する必要があり、ドキュメント (およびそれは NSManagedObjectContext) の準備が整ったら、保存した対応する NSManagedObjects を実際に見つけて設定しようとします。そのため、復元を実行するための呼び出しよりもはるかに遅れて復元が行われているため、通常はすべての復元作業を実行すると想定されます。ドキュメントが開かれ、適切に初期化されるのを待っている間、コントローラーが短時間空に見える可能性があるのではないかと心配しています。
この場合、ドキュメントを開くのをブロックして遅らせる目的があるので、アプリを開くのに時間がかかりますが、少なくともビューが表示される前に必要なすべてのデータをより正しく復元できます。特定のメソッドに時間がかかりすぎないようにするために実行されているタイマーはありますか? この漠然とした状態にある間に別のビューを表示する方が正しいでしょうか。これについてどうすればよいかはよくわかりませんが、ネットワークに依存している Facebook アプリなどの他のアプリで見られるようなものです。繋がり。
これまでのところ、ドキュメント内でこの種の問題の実際の説明を見つけることができないようです。
いつものように、どんな助けも大歓迎です!乾杯