NSClassFromString(@“MPMoviePlayerViewController”)在3.1.3(iPhone)上返回非零EVEN

时间:2010-06-23 00:37:20

标签: iphone sdk mpmovieplayercontroller

这怎么可能在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中是私有的)并且得到了非零结果。

OKAY ....所以,这个问题基本上只是改为:任何人都知道我可以检查的API是不是在3.1.3(或更早版本)?

URGH!

2 个答案:

答案 0 :(得分:1)

我认为您实际问的问题是如何确定您是否在iPhone OS 3.2或更高版本上运行。为什么不简单地使用-[UIDevice systemVersion]

答案 1 :(得分:0)

我成功地使用它。

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