Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS PresentMoviePlayServiceController驱动的can';不能使用同一个viewController调用两次_Iphone_Objective C_Ios_Uiviewcontroller_Mpmovieplayercontroller - Fatal编程技术网

Iphone iOS PresentMoviePlayServiceController驱动的can';不能使用同一个viewController调用两次

Iphone iOS PresentMoviePlayServiceController驱动的can';不能使用同一个viewController调用两次,iphone,objective-c,ios,uiviewcontroller,mpmovieplayercontroller,Iphone,Objective C,Ios,Uiviewcontroller,Mpmovieplayercontroller,因此,我尝试使用PresentMoviePlayServiceController方法在我自己的视图控制器中显示MPMoviePlayServiceController 但是,单击左上角的蓝色“完成”按钮后,当我再次显示相同的viewController时(这样我就可以恢复视频,而无需创建另一个MPMoviePlayerViewController实例),如果几秒钟后让控件自行消失,则这些控件将不再工作。如果在控件消失之前与它们进行交互,这些控件仍将起作用,但一旦它们自行消失,在点击视频时,您就

因此,我尝试使用PresentMoviePlayServiceController方法在我自己的视图控制器中显示MPMoviePlayServiceController

但是,单击左上角的蓝色“完成”按钮后,当我再次显示相同的viewController时(这样我就可以恢复视频,而无需创建另一个MPMoviePlayerViewController实例),如果几秒钟后让控件自行消失,则这些控件将不再工作。如果在控件消失之前与它们进行交互,这些控件仍将起作用,但一旦它们自行消失,在点击视频时,您就无法再将其恢复。这在设备和模拟器上都会发生

简化代码:

- (void) startPlayback
{
    if (self.videoViewController == nil)
    {
        self.videoViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:self.videoUrl]];
    }
    // present the video player
    [self presentMoviePlayerViewControllerAnimated:self.videoViewController];
}
假设startPlayback是一个委托方法或视图控制器中的某个对象,它由一个按钮触发。在这种情况下,Self将引用视图控制器

因此,有了这个,它将带来一个视频播放器,它可以完美地工作。然后,只要我稍等一下,这些控件就会消失,我可以通过点击视频将它们带回来。然后,我可以使用左上角的“完成”按钮关闭此视频播放器。一旦我关闭它,然后我就可以带回视频视图控制器。视频仍将播放,但现在,当我等待一段时间,控制消失时,我无法再通过点击屏幕打开控制,从而将自己困在视频播放器中

我已经找到了各种各样的方法来连接“完成”按钮,但它并没有真正允许我重用视频播放器。例如:

// Remove the observer so that the blue button doesn't close the viewController
[[NSNotificationCenter defaultCenter] removeObserver:self.videoViewController name:MPMoviePlayerPlaybackDidFinishNotification object:self.videoViewController.moviePlayer];

// Add itself as an observer
[[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(movieEnded:) name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:self.videoViewController.moviePlayer];
在my movieEnded:,我可以通过以下方式关闭电影视图控制器:

[self dismissMoviePlayerViewControllerAnimated];
但当我再次尝试演示viewController时,视频播放器在加载时卡住了。。。永远


有什么想法吗?

尝试使用解除锁定方法停止视频播放器,例如:[self.videoViewController stop];[视频控制器释放];videoViewController=nil;在dealloc方法中,我认为Ramshad是正确的,您可以尝试[self.videoViewController stop];在您关闭电影播放器控制器之前