В коде есть несколько проблем, вот исправления:
1> Удалить [mpviewController release];
, потому что он создан с использованием метода, который возвращает *autorelease*
объект. ([notification object]
).Чтобы освободить объект mpviewController
, объявите его как переменную экземпляра, освободите его и сделайте его равным nil.
if(mpviewController != nil)
{
[mpviewController release];
mpviewController = nil;
}
2> Поскольку вы объявили mpviewController
в качестве переменной экземпляра, вам не нужно обращаться к mpviewController
переменная через [notification object]
, потому что ее нет, поскольку вы не указали ее, когда добавляете наблюдателя в центр уведомлений.
3> Замените следующую строку кода:
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:mpviewController];
на
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
Объяснение: Когда вы добавляете наблюдателя, вы не предоставляете никакой информации об объекте, но во время удаления вы
Так что теперь ваш код станет:
- (void)playbackFinishedCallback:(NSNotification *)notification {
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
[mpviewController.view removeFromSuperview];
if(mpviewController != nil)
{
[mpviewController release];
mpviewController = nil;
}
}
Такжев - (void) dealloc
этого контроллера вы должны написать аналогичный код для освобождения mpviewController
.
Спасибо,