3

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 アプリなどの他のアプリで見られるようなものです。繋がり。

これまでのところ、ドキュメント内でこの種の問題の実際の説明を見つけることができないようです。

いつものように、どんな助けも大歓迎です!乾杯

4

1 に答える 1

1

最後に、UIManagedDocument の読み込みが完了したときからの通知を実装しました。これらは、復元したいコアデータ管理オブジェクトを持つすべてのコントローラーによって取得されました。復元中はエンコードされた URI を保持し、後でこの UIManagedDocument 準備完了通知を受け取ったときに、URI をそれぞれの管理対象オブジェクトにデコードしました。

私が説明した共有オブジェクトの問題は、appDelegate から 1 か所でエンコードして復元し、別の通知をシステムに送信して、この共有オブジェクトが完全にデコードされ、使用できるようになったことをシステムに通知することで解決しました。

理想的ではなく、すべてのオブジェクトが正しくデコードされるようにするためにメソッドのかなり多くの階層を作成する必要がありますが、問題なく動作します。

悲しいことに、それ以来、UIManagedDocument が開き終わる前に、UIDataSourceModelAssociation プロトコル メソッドが OS によって呼び出されるというつまずきにぶつかりました。悲しいことに、これは私が有用なことを何もできないことを意味します。したがって、私が本当に必要としているのは、CoreData UIManagedDocument POV からすべてが読み込まれるまで、アプリの復元を延期することです。その悩みは続く…

于 2014-09-16T08:29:25.980 に答える