1

キャンセルボタンがあります。キャンセルボタンを押すと、現在のビューコントローラーがポップされます。コントローラーをポップする前に、以前のビュー コントローラーの 1 つのメンバー (クラス Student) にアクセスしたいと考えています。だから私はこのようにしています:

StudentProfileViewController *controller = (StudentProfileViewController*)self.parentViewController;
    NSLog(@"%@", controller.student);

私のアプリはライン NSLog でクラッシュします。エラーは次のとおりです。

[UINavigationController student]: unrecognized selector sent to instance 0x6865180

奇妙な部分は「[UINavigationController student]」と書かれていますが、私のコントローラーはUIViewControllerです。

誰でもこれに光を当てることができますか?私は愚かな間違いが行われていることを知っています。

ありがとう

4

1 に答える 1

3

parentViewController は、最初にそのビューからモーダルに提示した場合にのみ、探しているコントローラーを返します。表示ビューではなく、スタック内の前のコントローラーを参照しようとしているようです。あなたの場合、それがあなたが提示した方法であれば、parentViewControllerはnavigationControllerです。希望するコントローラークラスにキャストしていますが、そうはなりません。より適切な方法は、 init メソッドで参照したいオブジェクトを渡すか、最も望ましいのは、デリゲート メソッドを作成して、このコントローラーが完了したときに前のビューに通知し、前のビューを意図したとおりに反応させることです。

于 2012-07-28T14:40:59.670 に答える