NSClassFromString (@ "MPMoviePlayerViewController") возвращает не ноль ДАЖЕ на 3.1.3 (iPhone) - PullRequest
0 голосов
/ 23 июня 2010

Как это возможно вернуть не ноль на iPhone 3.1.3 (3g 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;
 }
}

Я получил это возвращено:

MPMoviePlayerViewController not showing NIL!  It is: MPMoviePlayerViewController

Как это может произойти? Я использую устройство XCode 3.2.3 через USB.

Вот код, вызывающий его:

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];

Поймите, что я хочу протестировать ЛЮБОЕ устройство более 3.2, поэтому я, например, не тестирую UI_USER_INTERFACE_IDIOM. Как видите, 3.2 или выше требует добавления MPMoviePlayerController к представлению.

Есть идеи?

Добавление:

Похоже, что мы должны проверить класс, который НЕ является частным APi (в предыдущем выпуске iPhone OS). Я также протестировал UILongPressGestureRecognizer (который на самом деле присутствует, но приватный в 3.1.3) и получил ненулевой результат.

Ладно .... итак, этот вопрос в основном просто изменился на: Кто-нибудь знает API, который я могу проверить, но НЕ в 3.1.3 (или более ранней)?

Urgh!

Ответы [ 2 ]

1 голос
/ 23 июня 2010

Я думаю, что вопрос, который вы на самом деле задаете, заключается в том, как определить, работаете ли вы на iPhone OS 3.2 или выше.Почему бы просто не использовать -[UIDevice systemVersion]?

0 голосов
/ 27 июня 2010

Я использую это с успехом.

if ([MPMoviePlayerController instancesRespondToSelector:@selector(view)])
...