Я получил ту же ошибку при использовании многозадачного жеста (смахивание четырьмя пальцами) с экземпляром MPMoviePlayerViewController, открытым в fullScreen. Это привело к серьезному аварийному завершению работы приложения, в результате чего iPad не мог вращаться и в конечном итоге убивал iPad.
Похоже, что причина этого в значительной степени связана с неправильной настройкой файла .plist.
- Откройте файл .plist и найдите ключ «Необходимые фоновые режимы» (если вы показываете необработанные значения ключа, он называется «UIBackgroundModes»).
- Откройте раскрывающийся список «Требуемые фоновые режимы» и щелкните «Элемент 0» (или добавьте туда новую строку)
- В столбце «Значение» введите «Приложение воспроизводит аудио» (вы можете увидеть его в выпадающем меню, если щелкнуть по стрелке рядом со знаком добавления плюс плюс
Как только вы это сделаете, вы больше не получите эту ошибку.
// EDIT
Пока приложению не нужно воспроизводить видео и аудио, пока вы находитесь где-то еще в вашем приложении или другом приложении, вы, вероятно, не хотите, чтобы это видео передавалось в потоковом режиме и использовало эти ресурсы. Поэтому добавьте и установите флажок «Приложение не запускается в фоновом режиме» в вашем .plist.
Что касается воспроизведения, во время воспроизведения может возникнуть множество мыслей, которые могут привести к сбою приложения и устройства. Добавьте этот метод перед методом, который открывает ваш MPMoviePlayerController:
- (void) moviePlayerPlaybackStateDidChange: (NSNotification *) notification {
if (movplayer.playbackState == MPMoviePlaybackStateStopped) {
[movplayer setContentURL:[movplayer contentURL]];
[movplayer play];
}
}
Затем добавьте этого наблюдателя в метод, который вызывает ваш MPMoviePlayerController:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackStateDidChange:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];
Это поймает изменение, например, завершение видеоплеера или ускоренную перемотку в конец видео, и сбросит видео до начала, если iOS что-то не нравится. Полезно управлять такими ошибками / сбоями, которые случаются с игроком.