0

私のアプリは、ビュー (ビュー 1) でビュー コントローラーによって表示されるビデオを、アプリのメニュー/ナビゲーションの背景として使用します。ボタンはビデオの上部に配置され、ビデオの場所に応じて、ボタンはアプリのさまざまなセクションに移動します。別のセクション (ビュー 2 など) に移動してからビュー 1 に戻るまで、正常に動作します。その後、ビュー 1 で通知がクラッシュします。

[NSKeyValueObservance movieStateChangeCallback:]: 認識されないセレクターがインスタンス 0x13e920 2012-10-27 08:50:04.830 AppName[13707:707]送信されましたインスタンス 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 に戻ると、ビュー 1 が再初期化されます。

ARCを使用しています。

4

1 に答える 1

1

ビュー コントローラーが現在表示されておらず、メモリ警告が発生した場合、そのビューはすべて削除されます。これらは、再び表示されるときに再作成されます。View1 の割り当てが解除されているときに通知センターから自分自身を削除していないため、引き続き通知を受け取るよう求めています。

これを View1 クラスに追加してみてください:

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