2010-06-23 4 views
0

Comment cela peut-il retourner non-nul sur iPhone 3.1.3 (iPhone 3g)?NSClassFromString (@ "MPMoviePlayerViewController") renvoie EVEN non nil sur 3.1.3 (iPhone)

- (BOOL) isIOS3_2OrAbove 
{ 
Class mplayerControllerClass = NSClassFromString(@"MPMoviePlayerViewController"); 
if(mplayerControllerClass != nil) 
{ 
    NSLog(@"MPMoviePlayerViewController not showing NIL! It is: %@\n",[mplayerControllerClass description]); 
    return YES; 
} 
else 
{ 
    NSLog(@"MPMoviePlayerViewController is showing NIL!\n"); 
    return NO; 
} 
} 

Je reçois ce retour:

MPMoviePlayerViewController not showing NIL! It is: MPMoviePlayerViewController 

Comment cela peut-il arriver peut-être? Je suis sur XCode 3.2.3 en cours d'exécution de l'appareil sur USB.

Voici le code appelant:

NSString *movieName = @"litedefault.mp4"; 

if ([self isIOS3_2OrAbove] == YES) 
{ 
movieName = @"litedefault_3_2.mp4"; 
} 

NSString *moviePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:movieName]; 

moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:moviePath ]]; 

moviePlayer.movieControlMode = MPMovieControlModeHidden; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(set_up_views:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer]; 

if ([self isIOS3_2OrAbove] == YES) 
{ 
NSLog(@"IS iOS3.2 or above\n"); 
moviePlayer.view.frame = CGRectMake(0, 0, 320, 480); 
[window addSubview:moviePlayer.view]; 
[window makeKeyAndVisible]; 

} 
else 
{ 
NSLog(@"IS BELOW iOS3.2\n"); 
} 
[moviePlayer play]; 

comprendre que je suis désireux de tester pour tout appareil sur 3.2, donc je ne suis pas UI_USER_INTERFACE_IDIOM teste, par exemple. Comme vous le voyez, 3.2 ou ci-dessus nécessite d'ajouter MPMoviePlayerController à une vue.

Des idées?

Addendum:

Il semble que nous devons vérifier une classe qui n'est pas un APi privé (dans une version antérieure iPhone OS). J'ai testé UILongPressGestureRecognizer (qui est actuellement présent, mais privé dans 3.1.3) et j'ai obtenu un résultat non nul. OK, ...., cette question fondamentalement changé simplement à: Quelqu'un connaît une API que je peux vérifier qui n'est pas dans 3.1.3 (ou plus tôt)?

URGH!

Répondre

1

Je pense que la question que vous posez est de savoir comment déterminer si vous utilisez iPhone OS 3.2 ou supérieur. Pourquoi ne pas simplement utiliser -[UIDevice systemVersion]?

+0

OMGosh! Je ne pensais pas que ce serait aussi facile. Montre que je n'aurais pas dû programmer sans caféine. Merci! – Jann

0

Je l'utilise avec succès.

if ([MPMoviePlayerController instancesRespondToSelector:@selector(view)]) 
+0

Il parle de MPMoviePlayerVIEWController pas MPMoviePlayerController qui est vieux. –

Questions connexes