2011-07-03 6 views
4

私はNavigationControlベースのアプリケーションの代理人です。iPhone - topViewControllerと他のフォームの違い

私はこの方法を実行するために

RootViewController *rootViewController = (RootViewController *)[navigationController topViewController]; 

を使用してrootViewControllerにアクセスしようとすると、それは方法がrootViewControllerの「不明」であると言って、クラッシュします。

私はこの

RootViewController *rootViewController = (RootViewController *)[navigationController.viewControllers objectAtIndex:0]; 

を使用してrootViewControllerにアクセスする場合、それは動作します。

最初の行はどのオブジェクトにアクセスしていますか?ナビゲーションコントローラの

おかげ

+1

'それは方法が"と言って、クラッシュ未知の "rootViewController.'あなたは正確なエラーを貼り付けることができますか? – Steve

+0

"未知のセレクタがオブジェクトに送られました..."デバッガで両方を見て、私はそれらが異なるオブジェクトを返すのを見る... – SpaceDog

+0

あなたの例の中で 'navigationController'を意味し、他の例の' navigationController'は同じものではありませんか?私はあなたが同じラインで同じ意味でそれらを使用しようとしていたというあなたの言い回しに基づいて前提の下にいました。 – Steve

答えて

8

topViewControllerスタックの最上位のビューコントローラを表します。インデックス0が下になります。 topViewControllerは、1つのビューコントローラがスタック上にある場合のみ、インデックス0のオブジェクトです。複数ある場合は、同じではありません。 がRootViewControllerインスタンス用のメッセージにどのように応答するのか分からないため、クラッシュしていると思われます。

+0

アプリにはいくつかのviewControllersがありますが、それらは遅れて作成されたばかりです。理論的には、デリゲートが初期化した後、RootViewControllerを初期化します。この時点で初期化された他のviewControllerはありません。これが私がこれを理解していない理由です。 – SpaceDog

4

あなたがアクセスする前にチェックしたい場合は、私が使用したい

NSString *className = NSStringFromClass([[self.navigationController topViewController] class]); 
    NSLog(@"class name is: %@", className); 

で返されるクラスの種類を確認できます。

if ([[self.navigationController topViewController] isKindOfClass:[RootViewController class]]) 
+0

最初のものはMainを返し、2番目のものは自分が望むRootViewControllerを返します。大きな質問は、この「メイン」ビューコントローラは何ですか?私はそれを作成していない、少なくとも私が知っていることではない。 XcodeのNavigationControllerテンプレートを使用してプロジェクトを開始しました。 – SpaceDog

+0

あなたは私の最大の問題を解決しました。... thannnkksssssssss – NullData

関連する問題