不兼容的指针类型使用UIViewController类型的表达式初始化UINavigationController

时间:2015-12-05 17:48:07

标签: objective-c uiviewcontroller uinavigationcontroller

1. UINavigationController *rnc = self.app.window.rootViewController;

我收到警告不兼容的指针类型使用UIViewController类型的表达式初始化UINavigationController

2. UINavigationController *rnc = (UINavigationController *)self.app.window.rootViewController;

选项1显示警告"不兼容的指针类型使用UIViewController类型的表达式初始化UINavigationController"而选项2则没有。为什么?如果我不在选项2中投票,会有什么风险?

已更新

将UIViewController转换为UINavigationController有什么风险?

1 个答案:

答案 0 :(得分:1)

警告很清楚。在案例1中,rootViewController的类型为UIViewController,您将UIViewController实例提供给UINavigationController

在第2种情况下,您正在进行转换以将UIViewController转换为UINavigationController,因此编译器未发出任何警告。

您不应该尝试将UIViewController转换为UINavigationController。它们都不同。 UINavigationControllerUIViewController的子类。

如果您想将rootViewController嵌入导航控制器中,那么您应该执行以下操作:

 YourRootViewController *rootViewController = self.app.window.rootViewController;
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootViewController];