2010-04-23 46 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