【发布时间】:2015-03-11 19:42:44
【问题描述】:
我知道围绕这个警告有很多讨论,我们应该只在呈现视图控制器完全呈现并添加到视图层次结构中之后呈现视图控制器。所有这些规则都得到遵守,我在展示第二个模态视图控制器时仍然收到此警告。
这是这里发生的完整动作序列:
- 在应用启动时,初始化基本视图控制器并将其添加到窗口。
- 从基本视图控制器,点击按钮,模态显示第一个视图控制器。
- 从第一个视图控制器,点击一个按钮,模态显示第二个视图控制器。解散后,我需要显示第一个视图控制器,这样我就不会解散第一个 VC,然后从基础 VC 中呈现第二个 VC。
控制台警告:
2015-03-11 13:15:43.467 MyApp[597:84839] Warning: Attempt to present <MyCustomNavigationViewController: 0x15d6a8920> on <MyFirstModalViewController: 0x15d67cc60> whose view is not in the window hierarchy!
想法?
下面是我的代码 [不显示按钮处理程序;从调用方法中获取代码]:
// Present base view controller
self.window.backgroundColor = [UIColor whiteColor];
self.primaryViewController = [[MyParentViewController alloc] init];
self.navigationController = [[MyCustomNavigationViewController alloc] initWithRootViewController:self.primaryViewController];
[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
// Present first view controller modally from base view controller
MyFirstModalViewController *firstModal = [[MyFirstModalViewController alloc] init];
MyCustomNavigationViewController *aNavigationController = [[MyCustomNavigationViewController alloc] initWithRootViewController:firstModal];
[aNavigationController.navigationBar setBarStyle:UIBarStyleBlack];
[self presentViewController:aNavigationController animated:YES completion:nil];
// Present second view controller modally from first view controller: On user tap on a button
MySecondModalViewController *secondModal = [[MySecondModalViewController alloc] init];
MyCustomNavigationViewController *aNavigationController = [[MyCustomNavigationViewController alloc] initWithRootViewController:secondModal];
[aNavigationController.navigationBar setBarStyle:UIBarStyleBlack];
[self presentViewController:aNavigationController animated:YES completion:nil];
【问题讨论】:
-
我不确定这是否会导致问题,但您不应该在窗口中插入导航控制器的视图;将其添加为根视图控制器将其添加为您的子视图。您应该删除该行。否则,我在您的代码中看不到任何错误。您应该发布实际的错误消息。
-
@rdelmar 我已经添加了实际的控制台警告。此外,即使在窗口中删除导航控制器视图的插入后,警告仍然存在。
-
我无法复制您的问题。您是否在视图控制器生命周期方法(viewDidLoad、viewWillAppear 等)中执行任何呈现或关闭视图控制器的操作?你有故事板吗?如果有,你有没有设置任何转场?
-
我没有在任何视图初始化方法(如 viewWillAppear 等)中进行任何视图控制器演示。我没有使用情节提要,所有演示都是通过代码完成的。呈现新控制器的代码是在按钮处理程序中编写的。
-
你也没有在代码中对任何控制器进行任何解散?
标签: ios objective-c iphone cocoa-touch uiviewcontroller