.-- --

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 comment(-) trackback(-)
.21 2011

UIViewControllerのviewWillAppearとviewDidAppearが呼ばれない?

どうも、ビジネスショウに出展したツール作成により
会社Topページに写真がのってしまっています、UTOでございます。

新しい案件の要件調査にてハマってしまったことをメモしておきます。

いや、基本的なことなんでしょうけど結構深みにハマってましたので
ご紹介…

症状は
UINavigationControllerに登録したUIViewController達が、
表示する際に「viewDidLoad」は正しく呼ばれるが、
「viewWillAppear」と「viewDidAppear」が呼ばれないっという症状です。

普通、新規プロジェクトを作成時
AppliocationDelegateの「didFinishLaunchingWithOptions」内にてUINavigationControllerを作成し、初回表示するUIViewControllerを指定した上で、UIWindowにaddSubViewしますよね。

今回は起動後、初回表示画面にてデータを取得、読み込みを行い、完了後に画面遷移して
表示されるUIViewControllerをUINavigationControllerのRootViewControllerにしたいっという条件です。

ここで、私がとった行動は
ApplicationDelegateクラスでは初回表示画面のUIViewControllerを作成し、
UIWindowにaddSubview

初回表示画面にて読み込み処理完了後、UINavigationControllerを作成し
画面遷移後のUIViewControllerをRootViewControllerに指定してaddSubView

それ以降の画面はUINavigationControllerにpushしていく

という流れでしたが、
UINavigationControllerに登録していく全てのUIViewControllerにて
「viewWillAppear」、「viewDidAppear」が呼ばれませんでした。

UITableViewをふくんでいたりするので
結構重要だったのです。

調べました。

解決しました。


1.普通
UIWindow
↓ addSubview
UINavigationController→各pushされていくUIViewController

2.今回
UIWindow
↓ addSubview
UIViewController ※
↓ addSubview
UINavigationController→各pushされていくUIViewController


はい、※の部分が異なりますね。
※のUIViewControllerにaddSubviewしているため、
常に画面表示状態っという風になっているようです。

ピンときて、
※のUIViewControllerにてUINAvigationControllerを
「presentModalViewController」をかけてみたところ
きちんとwillもdidも呼ばれました。


今回のまとめ:
UINavigationControllerは最前面に配置しましょう。

以上、梅雨でも夏でも雪の日でもタオルを首にまいているUTOでした。


関連記事
スポンサーサイト

Comment

Post comment

  • comment
  • secret
  • 管理者にだけ表示を許可する

Trackback

trackbackURL:http://appteam.blog114.fc2.com/tb.php/193-21cbbf04

ブログ内検索

関連リンク

製品情報

最新記事

カテゴリ

プロフィール

neoxneo



NEXT-SYSTEM iOS Developers Blog


  • UTO:
    カナダ版iPhone4Sは、マナーモードでシャッター音がならない…


  • Ehara:
    ...


  • Hayate:
    ...


  • Tasaki:
    Developer登録完了...したのはいいけど


  • Ueda:
    ...



リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。