19

コンテナー ビューを使用しているストーリーボードにビュー コントローラーがあります。両方とも復元識別子が設定されています。親は正常に保存および復元されています。しかし、子供はそうではありません。どちらも、-encodeRestorableStateWithCoder:または子-decodeRestorableStateWithCoder:ビュー コントローラーで呼び出されていません。

ビュー コンテナで作成された子ビュー コントローラを保存する正しい方法は何ですか? 子のView Controllerをparentsに保存できますが-encodeRestorableStateWithCoder:、これにより保存されますが、復元中に使用する方法がありません。

4

2 に答える 2

-1

答えはドキュメント にあると思います。

" UIViewController クラスは、表示されたビュー コントローラーと、ビュー コントローラーの作成に使用されたストーリーボード (存在する場合) への参照を保存します。ビュー コントローラーは、ビュー階層内のビューにも関連情報を保存するように要求します。ただし、このクラスは含まれている子ビュー コントローラーへの参照は自動的に保存されません。カスタム コンテナー ビュー コントローラーを実装している場合、それらを保持するには、子ビュー コントローラー オブジェクトを自分でエンコードする必要があります。 "

したがって、次のようなことができます。

-(void)encodeRestorableStateWithCoder:(NSCoder *)coder {
    [super encodeRestorableStateWithCoder:coder];
    [self.myChildViewController encodeRestorableStateWithCoder:coder];
}

-(void)decodeRestorableStateWithCoder:(NSCoder *)coder {
    [super decodeRestorableStateWithCoder:coder];
    [self.myChildViewController decodeRestorableStateWithCoder:coder];
}

そして MyChildViewController では super を呼び出さないでください:)

于 2013-05-20T10:33:56.963 に答える