繁体   English   中英

如何拆分iOS 3.0和iOS 3.2的代码所以如果OS 3.2 ++我可以使用MPMoviePlayerViewController

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM