【问题标题】:Attempt to present <xViewcontroller> whose view is not in the window hierarchy尝试呈现视图不在窗口层次结构中的 <Viewcontroller>
【发布时间】:2014-05-29 12:14:36
【问题描述】:

我正在使用该选项来播放一些媒体,如果我将它链接到 ViewController.h 上的 IBAction 它将播放正常。 例如,当我尝试从另一个 ViewController 调用它时,就会出现问题;

 ViewController *myViewController = [[ViewController alloc] init];
        [myViewController showVideos];

这是从SecondViewController调用的,引用ViewController.m中的代码

-(void)showVideos {

    [[ApplifierImpact sharedInstance] showImpact];

}

如果我在 ViewController 上查看它,它可以使用它,但是使用

的调用
-(void)showVideos {

    [[ApplifierImpact sharedInstance] showImpact];    
}

从 SecondViewController.m 文件中调用时抛出关于窗口层次结构的错误

现在,在 SecondViewController.h 文件中,对 ViewController 的唯一引用是对 .h 文件的简单导入,我应该在其中初始化它还是给它一个属性?

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    这:ViewController *myViewController = [[ViewController alloc] init]; 创建一个新的 ViewController 对象。然后你不展示它(即不要让它访问屏幕)但你要求它给showVideos

    我怀疑您真正想要的是获得对现有 ViewController 的引用。当你创建你的SecondViewController 时,给它一个引用来作为代理的第一个。

    【讨论】:

    • 嗨 Phillip,这听起来正是我所需要的,我将如何去做你提到的第二种方法?
    • 这取决于SecondViewController 的创建方式。在第一个直接创建并呈现第二个的简单情况下,在第二个中创建一个委托属性,然后从第一个调用类似second.videoDelegate = self; 的东西。如果您要使用 segue 设置第二个,请执行相同的操作,但改用 prepareForSegue 方法。
    • (当你想回调第一个时,你会使用[self.videoDelegate showVideos];而不是创建任何新东西。)
    • 嗯,好的,第二个viewcontroller在这个方法中呈现; SecondViewController *both = [[SecondViewController alloc]init]; both.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentModalViewController:both animated:YES]; 我可以在 SecondViewController 中使用 [self.viewController showVideos]; 而不会出错,但是它无法访问它,我猜链接中缺少什么?
    • 第二个控制器中self.viewController的定义是什么? (如果是名字所暗示的,那么你需要在做“礼物”之前设置它。例如像both.viewController = self;这样的东西。)
    猜你喜欢
    • 2013-02-23
    • 2019-06-10
    • 2015-09-17
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    相关资源
    最近更新 更多