【发布时间】:2012-10-17 13:07:58
【问题描述】:
我的应用使用视图控制器(视图 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。
【问题讨论】:
-
NSKeyValueObservance是由于 KVO,而不是通知。您是否完全添加了 KVO? -
感谢 Dean - 很好。我没有使用 KVO - 至少我不知道。
-
奇怪...错误不一致。有时我得到: 2012-10-27 09:26:49.941 APPNAME[13846:707] -[__NSArrayM movieStateChangeCallback:]: unrecognized selector sent to instance 0x154170 2012-10-27 09:26:49.944 APPNAME [13846:707] * ** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSArrayM movieStateChangeCallback:]:无法识别的选择器发送到实例 0x154170”
-
有时错误是 EXEC_BAD_ACCESS
-
在这种情况下,你是 100% 正确的,有些东西正在释放你的视图。错误的随机性只是恰好在内存中该位置的对象 new。
标签: ios automatic-ref-counting mpmovieplayercontroller nsnotifications