Я считаю, что проблема вызвана выпуском MPMoviePlayerViewController. Просто сохраните контроллер, пока вы не покончили с ним.
До "[mp release];" добавьте эту строку, чтобы сохранить значение.
self.moviePlayerViewController = mp;
Затем обновите ваш метод dealloc, чтобы сделать релиз:
- (void)dealloc {
[_moviePlayerViewController release], _moviePlayerViewController = nil;
[super dealloc];
}
Добавьте синтез в начало вашего файла .m:
@synthesize moviePlayerViewController = _moviePlayerViewController;
Добавьте определение к @interface вашего .h файла:
MPMovieViewController *_moviePlayerViewController;
Добавьте свойство в ваш файл .h:
@property (readwrite, retain) MPMovieViewController *moviePlayerViewController;
Вам может понадобиться несколько заголовков в вашем заголовке:
#import <MediaPlayer/MediaPlayer.h>
#import <MediaPlayer/MPMoviePlayerViewController.h>
Вам также может понадобиться сбалансировать ваш вызов "presentMoviePlayer" и где-нибудь завершиться:
[self dismissMoviePlayerViewControllerAnimated];
Фу, код везде. В любом случае, если вы рано закончили работу с ресурсом, вы сможете быстрее его освободить, используя NotificationManager для отслеживания MPMoviePlayerPlaybackDidFinishNotification. Есть много примеров этого, поэтому я не буду повторять это.
Надеюсь, это поможет.