私はビデオを再生するためにMPMoviePlayerControllerを使用しています.2つのMPMoviePlayerControllersを使用しているときに問題が発生しました(2つのビデオは全く同じ時間に再生されません)。私は最初のコントローラーでできるだけ多くのビデオを再生し、完了したらそれを破棄し、別のMPMoviePlayerControllerを割り当てます。ムービープレーヤーが間違った活性化状態は、(1)MPMoviePlayerの起動状態が間違っていますか?
私が検索しました」:私は2番目のコントローラにcontrolStyleを設定するや否や、私がキャッチされない例外により「NSInternalInconsistencyException」、理由にアプリを終了
でSIGABRTを取得しますスタックオーバーフローで同様の問題が検出されました。その男は、再生完了の通知を削除するのを忘れてしまったと言いました。私はこれを[[NSNotificationCenter defaultCenter] removeObserver:self]を使って正しく行ったと信じています。
私はまだクラッシュします。むしろイライラする!
2人のコントローラーが同時に再生されていない限り、そのコントローラーを使用できない理由はわかりません。 AVPlayerにビデオを取り込むだけではなくてもいいです。
ありがとうございます!
編集:controlStyleの割り当てをコメントアウトすると、クラッシュする可能性があります。以下は、呼び出されたコールスタックとクラスからの重要なメソッドです。
- (void) makePlayer;
{
[player.view removeFromSuperview];
[player release];
player = [MPMoviePlayerController new];
player.view.frame = self.bounds;
player.view.hidden = YES;
player.controlStyle = MPMovieControlStyleNone;
player.scalingMode = MPMovieScalingModeNone;
[self addSubview: player.view];
}
- (void) dealloc;
{
[[NSNotificationCenter defaultCenter] removeObserver: self];
[player.view removeFromSuperview];
[player release];
[super dealloc];
}
- (void) setMovieByName: (NSString *) name;
{
[self makePlayer];
player.shouldAutoplay = NO;
[player setContentURL: [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource: name ofType: @"mov"]]];
[player stop];
[player prepareToPlay];
[[NSNotificationCenter defaultCenter] removeObserver: self];
[[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(movieDimensionsKnown:) name:MPMovieNaturalSizeAvailableNotification object: player];
[[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(playbackStateChanged:) name:MPMoviePlayerPlaybackStateDidChangeNotification object: player];
[[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(playbackFinished:) name:MPMoviePlayerPlaybackDidFinishNotification object: player];
}
- (void) playbackFinished: (NSNotification *) n
{
player.view.hidden = YES;
if ([delegate respondsToSelector: @selector(moviePlayerImageViewPlaybackDidFinish:)])
[delegate moviePlayerImageViewPlaybackDidFinish: self];
}
ムービーコントローラの作成と廃棄の正確さを知るために、いくつかのコードを示す必要があります。ちなみに、あなたがcontrolStyleを設定しないとどうなりますか?あなたはまだ例外がありますよね? – MiguelB