视图不在窗口层次结构中

时间:2013-01-21 12:59:44

标签: iphone ios objective-c appdelegate

我在app delegate中创建了一个函数,我从视图中运行但是当我再次运行该函数时,它给了我

<ResultViewController: 0x757dfc0> on <ViewController: 0x71325c0> whose view is not in the window hierarchy!

错误

app委托代码正在打开一个viewcontroller

代码是

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    ViewController *view1 = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];

    [self.window setRootViewController:view1];

    [self.window makeKeyAndVisible];

    return YES;
}
-(void)specify
{

    ResultViewController *res = [[ResultViewController alloc]init];

    CATransition *transition = [CATransition animation];
    transition.duration = 0.3;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromRight;
    [self.window.layer addAnimation:transition forKey:nil];

    [self.window.rootViewController presentModalViewController:res animated:NO];

}

3 个答案:

答案 0 :(得分:0)

没有运行你的代码我猜这是因为你想要添加的窗口在视图层次结构上不存在,你只是创建视图并将它们添加到屏幕 - 你需要抓住实际的屏幕本身。

尝试类似的东西 UIViewController * presentController = [[[[UIApplication sharedApplication] delegate] window] rootViewController];

ViewController * view1 = [[ViewController alloc] initWithNibName:@“ViewController”bundle:nil];

[presentController presentViewController:view1 animated:YES completion:nil];

答案 1 :(得分:0)

创建类时,将UIViewController作为其父类。

似乎UIViewController不是你班级的家长班,没有你对象的.view

答案 2 :(得分:0)

你应该在rootViewController的navigationController中提供模态视图控制器。

[self.window.rootViewController.navigationController presentModalViewController:res animated:NO];

因此,如果您真的想将模态视图控制器呈现到rootViewController中,请记住:

  

如果窗口具有现有视图层次结构,则在安装新视图之前将删除旧视图。

您第一次尝试显示模态viewController替换视图层次结构但self.window.rootViewController没有更改,它不再在窗口层次结构中。

或类似的东西。