2010-10-12 20 views
0

Mon application lit une vidéo en mode plein écran lorsque l'application est démarrée. Tout fonctionne parfaitement de 3.0 à 4.1.MPMoviePlayerController génère des erreurs UNIQUEMENT dans l'application universelle

Cependant, si je compile le même code pour une application universelle, il fonctionnera sur l'iPad, mais ne fonctionnera plus sur l'iPhone (simulateur).

Est-ce que quelqu'un a résolu ce problème?

Voici le code:

if ([self respondsToSelector:@selector(presentMoviePlayerViewControllerAnimated:)]) { 
    videoPath = [[NSBundle mainBundle] pathForResource:@"portrait" ofType:@"mov"]; 
    videoURL = [NSURL fileURLWithPath:videoPath]; 

    MPMoviePlayerController *aMoviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:videoURL]; 
    self.moviePlayerController = aMoviePlayerController; 
    [aMoviePlayerController release]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startVideo:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil]; 
    [moviePlayerController.view setFrame:self.view.bounds]; 
    [self.view addSubview:moviePlayerController.view]; 

    moviePlayerController.controlStyle = MPMovieControlStyleNone; 
} else { 
    //OS < 3.2 
    videoPath = [[NSBundle mainBundle] pathForResource:@"landscape" ofType:@"mov"]; 
    videoURL = [NSURL fileURLWithPath:videoPath]; 

    MPMoviePlayerController *aMoviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:videoURL]; 
    self.moviePlayerController = aMoviePlayerController; 
    [aMoviePlayerController release]; 

    moviePlayerController.movieControlMode = MPMovieControlModeHidden; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startVideo:) name:MPMoviePlayerContentPreloadDidFinishNotification object:nil]; 
} 

Et voici l'erreur:

-[MPMoviePlayerControllerOld view]: unrecognized selector sent to instance

0x7924470

Même si je tente d'éviter cela comme si ...

if ([moviePlayerController respondsToSelector:@selector(view)]) { 
    [moviePlayerController.view setFrame:self.view.bounds]; 
    } 

... la erreur est toujours levée.

Répondre

1

j'ai eu la même erreur quelques jours depuis. Il suffit de changer la base sdk de 3,2 à 4,1 J'espère que ça aide

+0

Ouais, ça l'a corrigé. Merci, marcio! –

1

Je n'ai pas encore d'explication pour l'erreur. Mais cela semble fonctionner (nécessité de tester sur les appareils plus anciens):

if ([self respondsToSelector:@selector(presentMoviePlayerViewControllerAnimated:)]) { 
     videoPath = [[NSBundle mainBundle] pathForResource:@"portrait" ofType:@"mov"]; 
     videoURL = [NSURL fileURLWithPath:videoPath]; 

     /* NEW */ 
     MPMoviePlayerViewController *aMoviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL]; 
     aMoviePlayerViewController.moviePlayer.view.frame = self.view.bounds; 
     aMoviePlayerViewController.moviePlayer.controlStyle = MPMovieControlStyleNone; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startVideo:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil]; 
     [aMoviePlayerViewController.moviePlayer play]; 
     [self.view addSubview:aMoviePlayerViewController.view]; 
     self.moviePlayerController = aMoviePlayerViewController; 


    } else { 
     //OS < 3.2 
     videoPath = [[NSBundle mainBundle] pathForResource:@"landscape" ofType:@"mov"]; 
     videoURL = [NSURL fileURLWithPath:videoPath]; 

     MPMoviePlayerController *aMoviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:videoURL]; 
     self.moviePlayerController = aMoviePlayerController; 

     aMoviePlayerController.movieControlMode = MPMovieControlModeHidden; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startVideo:) name:MPMoviePlayerContentPreloadDidFinishNotification object:nil]; 

     [aMoviePlayerController release]; 
    } 

Si seulement je pouvais me rappeler pourquoi je l'ai fait dans l'autre sens, en premier lieu;)