0

我的应用程序使用视图控制器(视图 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];

player是 View 1 的属性,因此声明如下:

@property (strong) MPMoviePlayerController *player;

我意识到这可能意味着播放器正在被释放?当我返回视图 1 时,包括视频在内的其他一切都正常,只是通知崩溃了。

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

我正在使用 ARC。

4

1 回答 1

1

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

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

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
于 2012-10-27T15:30:44.663 回答