• ベストアンサー

objective-cでご相談があります。

http://ameblo.jp/satoko-ohtsuki/entry-11369448573.html というページの内容のうち、 [self.navigationController.viewControllers indexOfObject:self] というコードの意味がわかりません。特に、indexOfObjectメソッドの 引数にselfが入っているところがわかりません。 どなたかこの意味を教えていただけないでしょうか。 以上、何卒よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

No.1です。 > self.navigationController.viewControllersは、一つ上のコントローラを取得すると言う意味ですよね。 ここの認識が違います。 selfは、自分自身(UIViewControllerクラス)というのは理解通りです。 self.navigationControllerは、その自分を管理しているUINavigationControllerクラスです。 そして、self.navigationController.viewControllersは、そのnavigationControllerが 管理しているUIViewControllerの集合(配列)です。 管理しているというのは具体的にどういうことかというと、 UINavigationControllerクラスのpushViewControllerメソッドやsegueのpush動作で 画面遷移すると、指定された遷移先UIViewControllerが画面表示されるとともに UINavigationControllerクラスのviewControllers配列にそのUIViewControllerが 追加されます。 また、popViewConrollerメソッドを発行したりナビゲーションバーの「戻る」ボタンを タップしたりすると、viewControllersの配列からそのUIViewControllerが削除され、 画面遷移前の元のUIViewControllerが画面に表示されます。 これにより、UINavigationControllerクラスが表示してきたUIViewControllerの履歴を viewControllersプロパティで管理しています。 もし英語がつらいなら http://secondflush2.blog.fc2.com/blog-entry-972.html でReferenceの一部を和訳してくれているサイトもありますので、 そういうのも参考にしてください。ただし、情報が古い可能性がありますので、 このサイトを参考にした後、Apple公式サイトの該当箇所を再読することを お勧めします。 結局、質問にあったサイトは、「戻る」ボタンが押されたかどうかを検知するために viewWillDisappearのタイミングで、自分自身がUINavigationControllerクラスの 管理下にあるかどうかを調べています。それが [self.navigationController.viewControllers indexOfObject:self] です。 この結果がNSNotFoundであれば、自分自身は配列から削除されており、 これは「戻る」ボタンが押されて自分自身が管理下から外れたことを意味します。 逆にこの結果がNSNotFoundでなければ、自分自身は管理下に入ったままであり、 これは、pushViewControllerメソッドやsegueのpush動作で新しい画面に遷移した (自分自身はUINavigationControllerの管理下に入ったまま、遷移先からの戻りに 備えて待機する)ことを意味しています。

noname#213637
質問者

お礼

ご回答ありがとうございました!

その他の回答 (1)

回答No.1

indexOfObjectが何をするメソッドかわからないということですか? それとも、このメソッドの意味はわかるけど、このコード全体で 何を意味するのかわからないということですか? 前者なら、Webサイトに書かれてある通りのコードをxcodeで入力して indexOfObjectが書かれてあるところにマウスカーソルをあてて、 optionを押しながらクリックすると、indexOfObjectの説明が 出てきますので、それを読んでください。 後者なら、indexOfObject以前にviewControllersの意味はわかりますか? それがわからないなら、同じようにviewControllersのところに マウスカーソルをあてて、option+クリックで説明を読んでください。 その2つがわかれば、後はWebサイトの解説と合わせて読めばどういう意味なのか たいていわかると思うんですが、もしそれでもわからないなら、 どこまでわかっていて、どこからわからないのか説明してください。 あなたの言葉でわかっているところや調べたことを説明してもらったら、 たぶん勘違いしているところや理解不足のところを指摘できると思います。

noname#213637
質問者

お礼

ご回答ありがとうございます。 self.navigationController.viewControllersは、一つ上のコントローラを取得すると言う意味ですよね。 そして、indexOfObject:~は、任意の配列の中に~があるかどうかを調べるメソッドというのは分かるのですが、~にselfが入っている意味がわからないのです。自分が入っているって一体どういうことなのでしょうか?

関連するQ&A