2010-04-23 76 views
1

我有一个iPhone应用程序,需要为iPhone 3.1.3和iPad的3.2。这是一款我想在iPad上工作的iPhone应用程序。#ifdef __IPHONE_3.2和#if __IPHONE_3.2有什么区别?

主要区别在于MPMoviePlayerController在3.2中引入/并弃用了很多东西。

因为iPhone OS只升到3.1.3而iPad在3.2上,所以我需要分离我的代码,以便它只编译相应操作系统所需的代码。

我不能使用[[UIDevice currentDevice]模型],因为我最终在3.1.3代码中使用了不推荐的警告。此外,在UIUserInterfaceIdiomPad 3.2是新的,因此不能很好地与3.1.3所以工作...

,我决定用这个,只编译什么是必要的特定OS:

#if __IPHONE _3_2 

//do 3.2 iPad stuff 

#else 

//do 3.1.3 iPhone/iPod Touch stuff 

#endif 

我的问题是...这些有什么区别?

#ifdef __IPHONE_3_2 

#if __IPHONE_3_2 

谢谢

回答

3

严格地说,#ifdef会看看__IPHONE_3_2已经给出,而#if __IPHONE_3_2将检查特定值的任何值。

在这种情况下,我会使用#ifdef __IPHONE_3_2,因为您只需检查值是否存在。

(仅供参考,__IPHONE_3_2被定义的情况下,价值30200你是好奇。)

+0

我希望有人能真正回答这个问题;-) – 2010-06-23 18:01:02

3

不能使用支票在编译时检查的事情是运行系统相关。您应该使用-respondsToSelector:UIInterfaceIdiom()宏。

确保与3.2 SDK(意味着将基本SDK设置为3.2)链接,并将您的部署目标设置为您想要支持的最低iPhone OS版本(似乎是3.1.3)。

看一看这个:Introducing Universal Applications for iPhone OS

+0

谢谢ChriB,你说得对。但是如果我将目标设置为3.1.3,则会出现错误,因为MPMoviePlayerController在3.2中的工作方式不同。如果我将它设置为3.2,那么它不适用于iPhone(3.1.3)。我实际上并不想创建一个通用应用程序。只是试图调整我的iPhone应用程序在iPad上工作(作为iPhone应用程序)。但MPMovieController不会允许我(或者我无法弄清楚)。 – Jonathan 2010-04-23 16:34:14

+1

据我所知,每个iPhone应用程序本身在iPad上运行。你不必为此改变任何东西。如果你想改变某些东西在iPad上运行 - 这意味着该应用程序没有在iPad上的“iPhone模式”中运行 - 你**正在构建一个通用应用程序。:P – bddckr 2010-04-23 16:39:48

+0

大部分的应用程序都会这样做,他们显然尽力保持这种状态。但并不是每个应用都可以。 MPMoviePlayerController在3.2中的工作方式不同。他们在苹果商店的iPad的功能页面中避开它。 – Jonathan 2010-04-23 21:23:05

0

对__IPHONE_3_2进行测试是3.1上编译代码的唯一方法,它具有3.2个符号,您完全没有建议NSClassFromString()/ respondsToSelector:/ UIInterfaceIdiom()的那些要点,例如,他们也没有解决链接错误,他们解决了一个完全不同的问题。

+0

那么问题是什么呢?据我所知,他希望他的代码能够在iPhone上运行,iPhone应该也可以在“iPhone模式”下在iPad上运行。这与3.2无关。他应该只是编写目前为3.1.3的iPhone OS。这将让他为iPhone编码,并让他的应用程序作为iPad上的iPhone应用程序运行。如果他想为iPad编写不同的代码,他需要构建一个通用的应用程序。 – bddckr 2010-04-26 15:56:37