MPMoviePlayerController没有在iPhone 5模拟器发射通知模拟器

问题描述:

我遇到了一个问题......也许有人碰到类似的东西:我有一个应用程序使用MPMoviePlayerController,并且用于非常好地工作。 尝试使用iPhone 5 Simulator编译并运行新Xcode 4.2,MPMoviePlayerController在加载电影时未发送通知。看起来它无法正确检测视频文件。 代码看起来或多或少像(简化的代码):MPMoviePlayerController没有在iPhone 5模拟器发射通知模拟器

// First I'm initializing the player with a URL from a file 
MPMoviePlayerController *player; 
player = [[MPMoviePlayerController alloc] init]; 
player.shouldAutoplay = NO; 
NSURL *url = [NSURL fileURLWithPath:path]; 
player.contentURL = url; 

// Then I'm adding an observer in order to wait for the player to find movie duration 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(durationAvailable:) 

在上述过程之后,我正在等待在一个循环中用于向被调用的通知时,通过等待约10秒,在此期间,I” m调用运行循环。 使用相同的代码,相同的Xcode 4.2版本,但与iPhone 4.3模拟器,大约一秒后通知被调用,我可以读取播放器的持续时间。但是,当在iPhone 5模拟器上运行完全相同的代码时,通知功能永远不会被调用,并且如果我以后尝试读取电影持续时间,它将包含0.

任何想法?

感谢, 林依晨

+0

我很好奇,为什么你在运行循环 – NJones

+0

什么,我试图做的是恢复从电影的几个参数,如等待其持续时间,自然大小等,并在框架分析电影后在通知中给出。但我想以同步方式获取这些内容,因此我添加了观察者并等待循环中的通知被调用。由于我不想阻止所有事情,所以我在等待时调用了运行循环。 – Ariel

OK,我设法找到一个解决办法的问题。 显然,加入观察者后,加入这一行的伎俩:

[player pause]; 

看起来,如果你不“激活”的玩家不知何故,该通知不会被解雇。在我的情况下,我只是想在不开始播放的情况下获得电影持续时间的通知,并且它在iOS5之前的版本中运行良好,但看起来他们改变了行为。无论如何,上述线路解决了这个问题。

阿里尔

试试这个MPMoviePlayerPlaybackStateDidChangeNotification:

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(stop) 
               name:MPMoviePlayerPlaybackStateDidChangeNotification 
               object:nil];