7

UIViewControlleriOS 6 では、Apple はおよび関連するクラスに状態の復元を追加しました。これにより、アプリケーションは終了時に状態を保存し、ユーザーがアプリケーションを再開したときに状態を復元できます。

すべてが正常に機能しているように見えますが、パターンに収まりたくない奇妙なシナリオに到達しました。

2 つのビュー コントローラーがViewControllerOneありViewControllerTwo、両方とも、正常に復元される任意の状態を格納しているとします。ViewControllerOne次に、delegateプロパティがあり、それがそのデリゲートであると想像してみましょうViewControllerTwo(これは、モーダル ビュー コントローラーの一般的なパターンです)。この関係を回復する責任は誰にありますか? そして、それはどのように保存/復元されることになっていますか?

私の特定のケースでは、ストーリーボードは関係ありません。復元は、 restorationClassプロパティを介してコードで行われます。私の最初の本能は、restoreClass でビュー コントローラーを作成しながら関係を復元しようとするrestorationClassことでしたが、他の既存のコントローラーがわからないため、そのような関係を完全に復元することはできません。

あるいは、delegate関係を復元するはずのプロパティを宣言するのがView Controllerである場合、他のクラスで復元されたコントローラーインスタンスはどうなりますか?

要するに、これは十分に文書化されていないシナリオのようであり、誰かがそれに光を当ててくれることを望んでいました.

4

1 に答える 1

3

他のView Controllerをプッシュする前に行うのと同じように、タスクはデリゲートView Controllerに落ちて、そのように設定されます。

これを達成する方法については、いくつかのオプションがあります。

ビュー コントローラーへの弱い参照をグローバルにアクセス可能な場所 (アプリ デリゲートなど) に保存し、これらの値を使用しapplication:didDecodeRestorableStateWithCoder:て委任を設定できます。これが API でのこのメソッドの目的です。

selfまたは、デリゲートがリッスンして自身をデリゲートとして設定する最上位ビュー コントローラーから"hereIAmThisIsMe" 通知 (ユーザー情報の一部を含む) を投稿することもできます。

于 2013-12-20T22:14:10.140 に答える