【发布时间】:2013-10-21 22:31:10
【问题描述】:
我知道这个问题已经被问了一百万次了,但是我在我检查过的许多问题中找不到合适的答案。
我有一个自定义视图控制器,我试图在用户点击按钮时显示视图控制器(所以这里没有“臭名昭著的viewDidLoad 问题”)。
这是我在用户点击按钮时运行的代码:(我有视图控制器的 NIB,我有一个导航控制器)
ICLoginViewController *loginViewController = [[ICLoginViewController alloc] initWithNibName:@"ICLoginViewController" bundle:[NSBundle mainBundle]];
//assuming we have a navigation controller.
UINavigationController *navigationController= (UINavigationController*)[[UIApplication sharedApplication] keyWindow].rootViewController;
[navigationController.topViewController presentViewController:loginViewController animated:YES completion:nil];
我在尝试展示视图控制器时收到Warning: Attempt to present <ICLoginViewController: 0xa08a810> on <UINavigationController: 0xa45de70> whose view is not in the window hierarchy! 错误。屏幕上什么也没有发生。如果我多次点击我会得到同样的错误,但仍然没有任何反应。我设置了一个断点并验证了navigationController 和navigationController.topViewController 不是nil。我使用情节提要(如果有帮助),但不适用于我要显示的自定义视图控制器。 (从长远来看,我想让它成为一个独立于应用程序的库,所以我没有在其中引用任何特定于应用程序的模块)为什么会出现这个错误?
【问题讨论】:
-
不使用self.navigationController有什么具体原因吗?
-
是的,我愿意。我将这段代码放在一个独立于应用程序的单独文件中,在这种情况下,
self只是一个NSOBject派生的自定义类,而不是视图控制器。
标签: iphone ios objective-c uiviewcontroller ios7