NSNotification MPVideoplayercontroller崩溃 - ARC

时间:2012-10-27 14:16:35

标签: ios automatic-ref-counting mpmovieplayercontroller nsnotifications

我的应用使用视图(视图1)中视图控制器显示的视频作为应用菜单/导航的背景。按钮位于视频的顶部,根据视频的位置,按钮会导航到应用的不同部分。它工作正常,直到我导航到另一个部分(视图2等),然后返回到视图1.之后,通知在视图1中崩溃:

  

[NSKeyValueObservance movieStateChangeCallback:]:无法识别的选择器发送到实例0x13e920   2012-10-27 08:50:04.830 AppName [13707:707] * 由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [NSKeyValueObservance movieStateChangeCallback:]:无法识别的选择器发送到实例0x13e920 “

以下是我添加到View 1的init方法的通知:

       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieStateChangeCallback:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:player];

       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:player];

播放器是View 1的属性,因此声明:

@property (strong) MPMoviePlayerController *player;

我意识到这可能意味着播放器正在被解除分配?当我返回包含视频的View 1时,其他一切工作正常,只是崩溃的通知。

当用户返回时,视图1正在重新初始化。

我正在使用ARC。

1 个答案:

答案 0 :(得分:1)

如果视图控制器当前不可见并且发生内存警告,则会删除其所有视图。然后当它再次可见时重新创建它们。当View1被取消分配时,您不会将自己从通知中心移除,因此它仍然要求接收通知。

尝试将此添加到您的View1类:

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}