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