iPhone - topViewController和其他表单之间的区别

时间:2011-07-03 14:54:23

标签: iphone objective-c

我是基于NavigationControl的app的代表。

当我尝试使用

访问rootViewController时
RootViewController *rootViewController = (RootViewController *)[navigationController topViewController];

运行一个方法,它崩溃了,说rootViewController上的方法是“未知”。

当我使用此

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

它有效。

哪一个对象是第一行访问?

感谢

2 个答案:

答案 0 :(得分:8)

导航控制器的

topViewController表示堆栈顶部的视图控制器。索引0是最低点。仅当一个视图控制器在堆栈上时,topViewController才是索引0处的对象。如果你有多个,那就不一样了。我猜这是因为它崩溃了,因为topViewController不知道如何响应用于RootViewController实例的消息。

答案 1 :(得分:4)

您可以使用

检查返回的班级类型
    NSString *className = NSStringFromClass([[self.navigationController topViewController] class]); 
    NSLog(@"class name is: %@", className);

如果您想在访问前进行检查,我会使用:

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