Iphone iOS多视图和MPMoviePlayer问题

Iphone iOS多视图和MPMoviePlayer问题,iphone,ios,ipad,ios4,Iphone,Ios,Ipad,Ios4,我有两个视图控制器,一个是主控制器,另一个是movieController 使用[self.view removeFromSuperview]从movieController滑回主控制器后在movieController中播放的视频仍作为背景声音播放 我确实发布了播放器,但不知道 @synthesize viewForMovie,player; - (void)viewDidLoad { [super viewDidLoad]; //background image se

我有两个视图控制器,一个是主控制器,另一个是movieController

使用
[self.view removeFromSuperview]从movieController滑回主控制器后在movieController中播放的视频仍作为背景声音播放

我确实发布了播放器,但不知道

@synthesize viewForMovie,player;
- (void)viewDidLoad {
    [super viewDidLoad];
    //background image
    self.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"mits_bg.png"]];

    //gesture recognizer -to up
    UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc]
                                              initWithTarget:self
                                              action:@selector(handleSwipes:)];
    swipeGesture.direction = UISwipeGestureRecognizerDirectionDown;
    [self.view addGestureRecognizer:swipeGesture];

    [swipeGesture release];

    //movie player
    [[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(movieDurationAvailable:)
     name:MPMovieDurationAvailableNotification
     object:nil];

    **self.player = [[[MPMoviePlayerController alloc] init] autorelease];**
    //self.player.controlStyle = MPMovieControlStyleNone; // no control at all :)
    self.player.contentURL = [self movieURL];

    self.player.view.frame = self.viewForMovie.bounds;
    self.player.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ;

    [self.viewForMovie addSubview:player.view];
    [self.player play];
}

//---gesture recognizer
- (IBAction) handleSwipes:(UIGestureRecognizer *) sender {
    UISwipeGestureRecognizerDirection direction = [(UISwipeGestureRecognizer *) sender direction];

    if (direction == UISwipeGestureRecognizerDirectionDown) {

        CATransition *transition = [CATransition animation];
        transition.duration = 0.75;

        transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

        transition.type = kCATransitionPush;
        transition.subtype = kCATransitionFromBottom;

        transition.delegate = self;

        // Next add it to the containerView's layer. This will perform the transition based on how we change its contents.
        [self.view.superview.layer addAnimation:transition forKey:nil];
        [self.view removeFromSuperview];
        **self.player = nil;**
        //[player release]; // I give it a try like this also

    }
}

- (void)viewDidUnload {
    [super viewDidUnload];
    self.viewForMovie = nil;
    self.player = nil;
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


- (void)dealloc {
    [thumbnailScrollView release];
    [viewForMovie release];
    [onScreenDisplayLabel release];
    [player release];
    [super dealloc];
}

当你这样做的时候,你会保留两次

self.player = [[MPMoviePlayerController alloc] init];
您应该在此添加一条
autorelease
消息

self.player = [[[MPMoviePlayerController alloc] init] autorelease];
除了在
viewDidUnload
dealoc
中,我没有看到调用的发行版。从superview中删除视图后,应立即调用它
nil
ing是一个更好的选择,因为
dealloc
中的释放调用将启用
nil
而不是一个解除分配的对象。因此,在从视图中删除它之后,将其设置为
nil
,如下所示

self.player = nil;

谢谢你的回答。我试过这些台词,但都不行。我甚至在[self.view removeFromSuperview]之前写了发布行;但是仍然不起作用。@tugce你能用你最新的代码更新这个吗,这样我就可以看到什么不起作用了?你能添加
[self.player stop]吗;[self.player.view从SuperView移除]执行前
self.player=nil。它看起来像是
self.viewForMovie
可能会保留该视图,但这应该会产生其他影响。好的,这会使其他视图中的声音静音;但是回到电影视图会使应用程序崩溃?你可能应该移动
**self.player=[[[MPMoviePlayerController alloc]init]autorelease];**//self.player.controlStyle=MPMovieControlStyleNone;//完全没有控件:)self.player.contentURL=[self movieURL];self.player.view.frame=self.viewForMovie.bounds;self.player.view.autoresizingMask=uiviewsautoresizingflexiblewidth | uiviewsautoresizingflexiblewhight;[self.viewForMovie addSubview:player.view];[self.player play]
视图将显示:
,因为您每次来到视图时都需要它显示。@Deepak我用相关的代码块进行了编辑。在从movieController向上滑动到mainController后,如果我向下滑动回到movieController应用程序崩溃,我意识到了另一件事。我确实在任何地方发布了这个播放器,我认为它可能会工作,但不知道为什么不行。