【问题标题】:NSNotification MPVideoplayercontroller crash - ARCNSNotification MPVideoplayercontroller 崩溃 - ARC
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 哦!我的印象是在 ARC 中没有做任何 dealloc。我会试一试-谢谢!编辑-工作!谢谢院长!显然,我需要进一步学习和练习 ARC(以及其他)中的内存管理。
  • dealloc 很有趣——你不必在 dealloc 中释放任何东西,但你仍然需要做任何其他事情来清理你的对象:)
猜你喜欢
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多