我有一个正在播放的视频。 要在 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 block ,但后来我(最后:D)阅读了苹果 AvailabilityInternal.h 文件定义中 __IPHONE_X_X 上面的注释:
它说你可以使用 __IPHONE_OS_VERSION_MIN_REQUIRED 来解决这类问题,但你不应该使用 __IPHONE_X_X 常量,因为我刚刚发生的事情......它们可能根本没有被定义,因此评估为 0。所以他们建议改用这些值。所以我现在有一个像这样的工作选择器......
我找到的解决方案
(现在这确实 100% 有效)
#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
}
关于iphone - 如何拆分 iOS 3.0 和 iOS 3.2 的代码,以便我可以使用 MPMoviePlayerViewController(如果 OS 3.2++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3019234/