[英]How to split Code for iOS 3.0 and iOS 3.2 so I can use MPMoviePlayerViewController if OS 3.2++
我有一个我播放的视频。 要在iOS 3.2中使用全屏我使用MPMoviePlayerViewController(似乎只适用于该类)。 但是,如果我想为iOS 3.0构建,我显然会遇到几个错误,因为这个类在iOS 3.0中是未知的。 我也知道如何在iOS 3.0中使用MPMoviePlayerController获得我想要的东西,但我只能拥有一个,无论是iOS 3.0的代码还是iOS 3.2的代码。
如何应对? - 找到解决方案 (参见捆绑编辑的底部)
我想我必须使用多个目标,你有关于如何做到这一点的建议(总是当我尝试多个目标我得到错误并放弃:))?
编辑捆绑 (多个编辑组合)
首先我认为这会奏效。
#ifdef __IPHONE_3_0
// OS 3.0 specific
#endif
但事实并非如此,因为在iOS的Availability.h文件中,您所有的操作系统都是从2.0到现在定义的。 因此,如果您为iOS 3.2编译,#ifdef __IPHONE_3_0也将返回true。
然后我认为这会奏效
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2
// Code for older iOS
#else
// Code for iOS 3.2 up
#end
但它也没有。 因为在iOS 3中例如__IPHONE_3_2未定义。
所以我想我必须创建一些更智能的if / elseif / else块然后我(最后:D)读取苹果AvailabilityInternal.h文件定义中__IPHONE_X_X上方的注释:
它说你可以使用__IPHONE_OS_VERSION_MIN_REQUIRED来解决这类问题,但你不应该使用__IPHONE_X_X常量因为刚刚发生在我身上的事情......他们根本就没有被定义,因此评估为0.所以他们建议使用相反的价值观。 所以我现在有一个像这样的工作选择器......
(现在这真的很有效)
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 30200
// code for iOS below 3.2
#else
// code for iOS 3.2 ++
#endif
我不确定这是不是你想要做的,但是根据Apple对iPad编程指南中的通用应用程序的建议,如果你想构建具有不一致API的多个操作系统版本,你应该使用NSClassFromString,并从那里。 这样,您只需拥有一个目标(您支持的最低操作系统),并通过您的代码完成类似的操作
Class mplayerControllerClass = NSClassFromString(@"MPMoviePlayerViewController");
if(mplayerControllerClass != nil) {
//Code for 3.2, e.g. [mplayerControllerClass alloc]
} else {
//Code for pre-3.2 OSes
}
试试这个...
#ifdef IPHONE_OS_3.2
/* iOS 3.2 code */
#endif
#ifdef IPHONE_OS_3.0
/* iOS 3.0 code */
#endif
...在编译器看到之前,将删除有问题的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.