はUIViewController
および関連クラスに状態の復元を追加しました。これにより、アプリケーションは終了時に状態を保存し、ユーザーがアプリケーションを再開したときに復元することができます。のUIViewController州立修復 - iOSの6 Appleと弱い関係
すべてがしかし、私はパターンに合うように望んでいない奇妙なシナリオに達している、正常に動作するようです。
ViewControllerOne
とViewControllerTwo
の2つのビューコントローラがあり、どちらも正常に復元された任意の状態が格納されているとします。今度はViewControllerOne
にdelegate
というプロパティがあり、ViewControllerTwo
がデリゲート(モーダルビューコントローラの共通パターン)であるとしましょう。この関係を回復する責任は誰にありますか?そして、それはどのようにして保存/復元されるはずですか?何の絵コンテが関与していないしている私の特定のケースで
、復元がrestorationClass
プロパティを使用して、コード内で起こります。私の最初の本能は、修復クラス内にView Controllerを作成しながら関係を復元しようとしていましたが、restorationClass
には他の既存のコントローラがないため、このような関係を復元できません。
また、delegate
プロパティを宣言するビューコントローラであれば、リレーションシップを復元するはずです。次に、他のクラスに復元されたコントローラインスタンスはどうなりますか?要するに
、これは悪い文書化されたシナリオのように思えるし、私は誰かがそれにいくつかの光を当てることができ期待していました。
これは確かに事態を起こすもっともらしい方法ですが、それが最もエレガントではないということに同意しないでしょうか?つまり、最初に提案されたソリューションがカプセル化を少し破るように感じます(AppDelegateはこれを「すべて知っています」ということになります)。 2番目の方法はもう少し興味深いアプローチですが、decodeRestorableStateWithCoder:でこの通知をどこに送りますか? –
オプションがありますが、どのコントローラが最初に復元されるのかについて心配する必要があります。 –
@HenriNormakところで、最初の方法は必ずしもカプセル化を中断しません。プロトコルを実装し、 'PostRestorationHandler'と呼びましょう。ここにはメソッド' didFinishRestoration'があり、デリゲートビューコントローラにデリゲートを設定させることができます。 AppDelegateは、ビューコントローラ(およびそれらのアプリケーションデリゲートについて)が存在していることを知っていますが、内部には触れません。 –