2010-09-02 37 views
0

這是我在3.1.3播放視頻的同時發生的崩潰。它在4.0上正常工作。- Iphone 3.1.3上的[UIWindow addEventMonitor:]崩潰

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIWindow addEventMonitor:]: unrecognized selector sent to instance 0x127500'

任何答案將是有益的版本。謝謝,

回答

0

播放視頻在os 3.0+和os 4.0+之間的處理方式不同,也是出於什麼原因使用addEventMonitor?

這裏是我如何做到這一點:

-(void)playStoryMovie { 
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"campaign1" ofType:@"mp4"]]; 
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url]; 
// Register to receive a notification when the movie has finished playing. 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(moviePlayBackDidFinish:) 
              name:MPMoviePlayerPlaybackDidFinishNotification 
              object:moviePlayer]; 

if ([moviePlayer respondsToSelector:@selector(setFullscreen:animated:)]) { 
    // Use the new 3.2 style API 
    moviePlayer.controlStyle = MPMovieControlStyleNone; 
    moviePlayer.shouldAutoplay = YES; 
    // This does blows up in cocos2d, so we'll resize manually 
    // [moviePlayer setFullscreen:YES animated:YES]; 
    [moviePlayer.view setTransform:CGAffineTransformMakeRotation((float)M_PI_2)]; 
    CGSize winSize = [[CCDirector sharedDirector] winSize]; 
    moviePlayer.view.frame = CGRectMake(0, 0, winSize.height, winSize.width); // width and height are swapped after rotation 
    [[[CCDirector sharedDirector] openGLView] addSubview:moviePlayer.view]; 
} else { 
    // Use the old 2.0 style API, YES APPLE WE KNOW ITS DEPRECATED BUT THIS IS FOR THE OLD DEVICES. 
    moviePlayer.movieControlMode = MPMovieControlModeHidden; 
    [moviePlayer play]; 
} 


} 

- (void)moviePlayBackDidFinish:(NSNotification*)notification { 
    MPMoviePlayerController *moviePlayer = [notification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name:MPMoviePlayerPlaybackDidFinishNotification 
                object:moviePlayer]; 

    // If the moviePlayer.view was added to the openGL view, it needs to be removed 
    if ([moviePlayer respondsToSelector:@selector(setFullscreen:animated:)]) { 
     [moviePlayer.view removeFromSuperview]; 
    } 

    [moviePlayer release]; 
}