2010-06-26 4 views
0

J'ai commencé à faire des clins d'œil à mon cerveau - je joue des vidéos avec MoviePlayerViewController, mais quand j'essaie de jouer avec une vidéo aléatoire via l'accéléromètre, je tombe en panne quand essaie de passer au nouveau film.MoviePlayerViewController transition provoquant un plantage

Voici le code qui joue le film:

  -(void)playMovieAtURL:(NSURL*)theURL { 
     MPMoviePlayerViewController* theMovie=[[MPMoviePlayerViewController alloc] initWithContentURL:theURL]; 

      if (theMovie){ 
     [self presentMoviePlayerViewControllerAnimated:theMovie]; 
      theMovie.moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
     [theMovie.moviePlayer play]; 
     [theMovie release]; 
    } 
} 

Et voici le code de l'accéléromètre:

- (void) accelerometer: (UIAccelerometer *)accelerometer didAccelerate: (UIAcceleration *)acceleration { 
if (self.lastAcceleration) { 
    if (!shakeDetected && IsDeviceShaking(self.lastAcceleration, acceleration, 0.7)) { 
     shakeDetected = YES; 


NSLog(@"Shake detected"); 

    int filescount = [entries count]; 
    int randomIndex; 

    for(int index = 0; index < filescount; index++) 
    { 
    randomIndex= arc4random() % filescount; 
    [entries exchangeObjectAtIndex:index withObjectAtIndex:randomIndex]; 
    } 

    AppRecord *app = [entries objectAtIndex:randomIndex]; 
    contentController.detailItem = app; 
    [self playMovieAtURL:[NSURL URLWithString:app.applink]]; 
    } 
    else if (shakeDetected && !IsDeviceShaking(self.lastAcceleration, acceleration, 0.2)) { 
      shakeDetected = NO; 
     } 
    } 
self.lastAcceleration = acceleration; 
} 

Le crash se produit quand il passe des vidéos à cet endroit:

[self presentMoviePlayerViewControllerAnimated:theMovie]; 

L'erreur de débogage lorsque je secoue pour changer de vidéos est:

Fin de l'application en raison d'une exception non interceptée 'NSInternalInconsistencyException', raison: 'Tentative de passage d'une transition modale de UINavigationController à MPMoviePlayerViewController alors qu'une transition est déjà en cours. Attendez que viewDidAppear/viewDidDisappear sache que la transition en cours est terminée '

Toutes les suggestions et idées sont grandement appréciées. Je vous remercie!!

+0

Avez-vous trouvé un moyen de résoudre ce problème (autre que d'appeler une méthode quelques fractures d'une seconde plus tard)? – stk

Répondre

0

Je rencontre un problème similaire lors de l'installation de mon application pour la première fois sur l'appareil. Lorsque j'essaie de lire une vidéo, l'application plante. J'utilise aussi le [self presentMoviePlayerViewControllerAnimated: theMovieView]; appel. Voici le vidage de pile du débogueur.

#0 0x3037fd7c in ___forwarding___ 
#1 0x30312680 in __forwarding_prep_0___ 
#2 0x35203dee in -[MPMoviePlayerViewController viewDidAppear:] 
#3 0x324128bc in -[UIWindowController transitionViewDidComplete:fromView:toView:] 
#4 0x323959da in -[UITransitionView notifyDidCompleteTransition:] 
#5 0x3239588e in -[UITransitionView _didCompleteTransition:] 
#6 0x32412556 in -[UITransitionView _transitionDidStop:finished:] 
#7 0x3237a97a in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] 
#8 0x3237a884 in -[UIViewAnimationState animationDidStop:finished:] 
#9 0x343557c0 in run_animation_callbacks 
#10 0x34355662 in CA::timer_callback 
#11 0x30352a5a in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ 
#12 0x30354ee4 in __CFRunLoopDoTimer 
#13 0x30355864 in __CFRunLoopRun 
#14 0x302fe8ea in CFRunLoopRunSpecific 
#15 0x302fe7f2 in CFRunLoopRunInMode 
#16 0x31a776ee in GSEventRunModal 
#17 0x31a7779a in GSEventRun 
#18 0x323272a6 in -[UIApplication _run] 
#19 0x32325e16 in UIApplicationMain 
#20 0x000022ca in main at main.m:14