Objective c 为什么不是';是否不从SuperView删除我的电影子视图?Xcode

Objective c 为什么不是';是否不从SuperView删除我的电影子视图?Xcode,objective-c,video,nsnotification,Objective C,Video,Nsnotification,我想让一部电影在不点击“完成”按钮的情况下自动播放。我认为这是最近iOS 6出现的问题,因为我正在严格遵循教程,当我插入NSLogs时,NSNotification和removeFromSuperview会被识别,但电影结束后会留在那里。这是我的代码,请帮助: - (IBAction)playMovie:(id)sender { NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]

我想让一部电影在不点击“完成”按钮的情况下自动播放。我认为这是最近iOS 6出现的问题,因为我正在严格遵循教程,当我插入NSLogs时,NSNotification和removeFromSuperview会被识别,但电影结束后会留在那里。这是我的代码,请帮助:

    - (IBAction)playMovie:(id)sender
{
    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                         pathForResource:@"RomneyFlipSequence1" ofType:@"mov"]];
    _moviePlayer =
    [[MPMoviePlayerController alloc]
     initWithContentURL:url];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlayBackDidFinish:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:_moviePlayer];

    _moviePlayer.controlStyle = MPMovieControlStyleDefault;
    _moviePlayer.shouldAutoplay = YES;
    [self.view addSubview:_moviePlayer.view];
    [_moviePlayer setFullscreen:YES animated:NO];
}

- (void) moviePlayBackDidFinish:(NSNotification*)notification {

    MPMoviePlayerController *player = [notification object];

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerPlaybackDidFinishNotification
                                                  object:player];

    if ([player
         respondsToSelector:@selector(setFullscreen:animated:)])
    {
    [player.view removeFromSuperview];
    }
}
@end

您已经添加了
\u moviePlayer.view
作为视图,并且您正在尝试删除
player.view

我认为这样可以做到:

- (void) moviePlayBackDidFinish:(NSNotification*)notification {

MPMoviePlayerController *player = [notification object];

[[NSNotificationCenter defaultCenter] removeObserver:self
                                                name:MPMoviePlayerPlaybackDidFinishNotification
                                              object:player];

if ([player
     respondsToSelector:@selector(setFullscreen:animated:)])
{
[_moviePlayer.view removeFromSuperview];
}

}

您将播放机输入全屏模式

[_moviePlayer setFullscreen:YES animated:NO];
阅读中的其他解决方案,这样看来,当您按下“完成”时,播放机将首先退出全屏,然后抛出通知。阅读后,添加

在您的
从SuperView中移除之前,
调用将解决您的问题

如果上面的方法不起作用,那么你可以尝试先停止播放器,这样完整的代码就会被删除

-(void)removePlayer:(MPMoviePlayerController *)player{

    NSLog(@"Playback Finished");
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:_moviePlayer];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerDidExitFullscreenNotification object:_moviePlayer];

    [_moviePlayer stop]; // <-- May not be needed
    if ([_moviePlayer respondsToSelector:@selector(setFullscreen:animated:)])
    {
        [_moviePlayer setFullscreen:NO animated:YES];
        [_moviePlayer.view removeFromSuperview];

    }

    _moviePlayer=nil;



}
-(无效)移除播放器:(MPMoviePlayerController*)播放器{
NSLog(@“播放完成”);
[[NSNotificationCenter defaultCenter]removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification对象:_moviePlayer];
[[NSNotificationCenter defaultCenter]removeObserver:self name:MPMoviePlayerDexitFullScreenNotification对象:_moviePlayer];

[电影播放器停止]//还是一样,电影没有退出。我本来希望这个修正能起作用,但是因为第一行中的player=\u moviePlayer,我想是一样的。问题似乎确实出在最后一行。你解决了这个问题了吗?我也有同样的问题。是的,这是离开全屏的问题。这一行需要添加:player。全屏=否;[player.view removeFromSuperview];
-(void)removePlayer:(MPMoviePlayerController *)player{

    NSLog(@"Playback Finished");
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:_moviePlayer];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerDidExitFullscreenNotification object:_moviePlayer];

    [_moviePlayer stop]; // <-- May not be needed
    if ([_moviePlayer respondsToSelector:@selector(setFullscreen:animated:)])
    {
        [_moviePlayer setFullscreen:NO animated:YES];
        [_moviePlayer.view removeFromSuperview];

    }

    _moviePlayer=nil;



}