0

我的应用程序使用视图中的视图控制器显示的视频(视图1)作为应用程序菜单/导航的背景。按钮位于视频的顶部,取决于视频的位置,这些按钮将导航到应用的不同部分。它正常工作,直到我离开导航到另一个部分(查看2等),然后返回到视图1.在此之后,通知暴跌视图1:NSNotification MPVideoplayercontroller crash - ARC

[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]; 

球员是,正是如此声明查看1的属性:

@property (strong) MPMoviePlayerController *player; 

我意识到,这很可能意味着玩家被释放?当我返回视图1(包括视频)时,其他一切正常,它只是通知崩溃。

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

我正在使用ARC。

+0

'NSKeyValueObservance'是由于志愿,不通知。你是否加入了KVO? – deanWombourne

+0

谢谢迪恩 - 很好。我不使用KVO - 至少不是我所知道的。 –

+1

奇怪...错误不一致。有时我得到:2012-10-27 09:26:49.941 APPNAME [13846:707] - [__ NSArrayM movieStateChangeCallback:]:无法识别的选择器发送到实例0x154170 2012-10-27 09:26:49.944 APPNAME [13846:707] ***终止应用程序由于未捕获的异常“NSInvalidArgumentException”,原因是:“ - [__ NSArrayM movieStateChangeCallback:]:无法识别的选择发送到实例0x154170” –

回答

1

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

尝试添加以下内容到视图1类:

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

哦!我有一个印象,就是没有在ARC里做任何dealloc。我会给它一个镜头 - 谢谢! 编辑 - 工作!谢谢Dean!显然,我需要在ARC中进行内存管理的进一步学习和练习(否则)。 –

+0

'dealloc'是一个很有趣的 - 你不必在dealloc中释放任何东西,但你仍然必须做任何你需要做的事情清理你的对象:) – deanWombourne