好的我知道這裏有很多帖子,但我仍然遇到麻煩。下面是我想要做的僞代碼:如何在頭文件中使用預處理器檢查?
if(device is running iOS 5 or up)
@interface RootViewController : UIViewController <UIPageViewControllerDelegate, UIGestureRecognizerDelegate>
@property (strong, nonatomic) UIPageViewController *pageViewController;
else
@interface RootViewController : UIViewController <LeavesViewDelegate, UIGestureRecognizerDelegate>
@property (strong, nonatomic) LeavesViewController *leavesViewController;
endif
我說得對不對思考我需要使用預處理器宏檢查,因爲它是在頭文件?這是一本書應用程序,如果它是iOS 5或更高版本(因此具有UIPageViewController),應使用UIPageViewController,否則它會退回到Leaves(https://github.com/brow/leaves)上。我有所有的代碼設置。只需要知道如何告訴編譯器使用哪個。我不認爲使用任何運行時檢查是可行的,因爲我只需要UIPageViewController或Leaves編譯的協議方法,而不是兩者。我寧願不使用完全獨立的源文件。我一直在使用這些檢查嘗試:
#ifdef kCFCoreFoundationVersionNumber_xxx
#ifdef __IPHONE_xxx
#if __IPHONE_OS_VERSION_MAX_ALLOWED <__IPHONE_xxx
(各種XXX的)
缺少什麼我在這裏?
編輯:
我也注意到這個默認.PCH:
#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif
這使我想知道爲什麼同樣的試驗並沒有在我的.h文件中工作?
大多數時候,iOS的二進制文件不是分別編譯的不同版本的操作系統;只有一個二進制文件用版本X的「基本SDK」設置和版本Y的「部署目標」(向後兼容性)設置進行編譯,其中X> = Y。因此,除非預處理器宏執行此操作,否則不能執行此操作您打算在商店上部署單獨的應用程序,但是從相同的代碼庫構建。 – 2012-04-20 06:33:01
那麼處理這個問題的標準方法是什麼?我是否需要將其更改爲僅使用運行時檢查? – Marty 2012-04-20 06:34:34
我有兩個目標,然後使用預處理器檢查,以便以不同的方式編譯兩個目標? – Marty 2012-04-20 06:38:18