これまで同様の質問が掲載されていましたが、私にとってはうまくいくソリューションが見つからないようです。 (映画は罰金果たし一度呼び出し、私は映画を再生するとMPMoviePlayerControllerは1回再生してからエラーをスローします
-(void)playMovie:(NSString *)movieName
{
NSURL *movieURL;
NSBundle *bundle = [NSBundle mainBundle];
if(bundle)
{
NSString *moviePath = [bundle pathForResource:movieName ofType:@"m4v"];
if(moviePath)
{
movieURL = [NSURL fileURLWithPath:moviePath];
}
}
MPMovieController *mp = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
if(mp)
{
self.moviePlayer = mp;
[mp release];
[self.moviePlayer play];
}
[movieURL release];
}
、それは異なるに再び呼び出されたときに:私はMPMoviePlayerControllerのIVARを保存するのMoviePlayerクラスを持っている、と私はクラスで以下のメソッドを持っていますまたは同じ)ムービーファイルには、私は次のエラー・スタックを取得:
_class_isInitialized
_class_lookupMethodAndLoadCache objc_msgSend
-[MoviePlayer setMoviePlayer:]
-[MoviePlayer playMovie:]
私はそれを修正するかどうかはわかりません! self.moviePlayer = mpが呼び出されると、現在のmoviePlayerが解放され、新しいものが追加されたと仮定しましたか?プロパティは(非原子的、保持)に設定されます。誰か助けてもらえますか?
ありがとうございました
お返事ありがとうございました。あなたの提案を試してみましたが、NSPopAutoreleasePool> [MPMoviePlayer Controller dealloc]メソッドでエラースタックを取得しました。私はコード内でMPMoviePlayerControllerをオートレリースしたことはありません。 MPMoviePlayerControllersはプールに自動的に追加されますか? –
スタックを持っている場合は、ムービープレーヤーがリリースされた場所がわかります(うまくいけば)。 いいえ、initを使用したため、リリースするのはあなたの責任です(ココアメモリ管理)。 プレイヤーを解放するときに追跡する必要があります。 MPMoviePlayerのカテゴリを作成してから、releaseメソッドを実装することもできます。そのメソッドにブレークポイントを置き、呼び出されているときを見つけます。 –