2013-03-10 32 views
16

我讀了很多關於爲這兩個系統創建一個跨平臺庫的問題。每個答案都指向靜態庫作爲解決方案。創建一個iOS/OS X跨平臺類

我不想用靜態庫結束了,我想創建適用於iOS的方法和其對應的OS X.

-(void)createColor:(NSColor*); 
-(void)createColor:(UIColor*); 

我已經是第一個問題的一類我無法找到一種方法來使用僅在特定系統中可用的類。舉例來說,我怎樣才能管理一個在iOS中的UIColor和在OS X中的NSColor的函數?

如果我爲iOS創建項目,當我查看Foundation.h時,我在標題列表中找不到NSColor.h

我想用TARGET_OS_MACTARGET_OS_IPHONE的定義來區分這兩個系統......我是否正確?

編輯添加更多的信息:

目前我有兩個目標:一個iOSTestApp和OSxTestApp。對於這些目標,我已根據系統包含了所需的框架。

使用TARGET_OS_MACTARGET_OS_IPHONE僅在選擇OSXTestApp作爲活動目標時有效。當我選擇iOSAppTest時,Xcode返回OS X數據類型的錯誤(即NSColor

在這裏產生這些錯誤的代碼的一個例子:

#if TARGET_OS_MAC 
-(void)createColor:(NSColor*)color;  

#elif TARGET_OS_IPHONE 
-(void)createColor:(UIColor*)color; 

#endif 

雖然如果我反轉它的工作原理的定義.. 。 這裏產生這些錯誤的代碼示例:

#if TARGET_OS_IPHONE 
-(void)createColor:(UIColor*)color; 

#elif TARGET_OS_MAC 
-(void)createColor:(NSColor*)color; 

#endif 
+0

回答說你需要IOS的靜態庫 - 其餘的問題我沒有得到 – 2013-03-10 14:21:58

+0

我無法理解倒票。 無論如何,我不想創建一個動態庫...如果我告訴你,我想創建一個助手類多平臺,這聽起來更好嗎? – MatterGoal 2013-03-10 14:41:09

+0

因爲這個問題對我來說真的不清楚,你的評論也沒有幫助:D標題是「創建一個非靜態庫」,而你說「我不想動態庫」:D – 2013-03-10 14:43:54

回答

20

你看到從TARGET_OS_IPHONE被定義爲TARGET_OS_MAC變體的事實出現的問題。 (換句話說,TARGET_OS_IPHONETARGET_OS_MAC的一個更具體的情況,或者TARGET_OS_MAC是一個矩形,因爲TARGET_OS_IPHONE是一個正方形)。

因此,在爲iOS編譯時出現以下代碼錯誤,因爲iOS會匹配這兩個條件,但NSColor未針對iOS定義。

#if TARGET_OS_MAC 
-(void)createColor:(NSColor*)color;  

#elif TARGET_OS_IPHONE 
-(void)createColor:(UIColor*)color; 

#endif 

下面的代碼工作正常進行,因爲兩者適用於iOS,但第一種情況相匹配,併爲Mac OS X,它不匹配第一個,但不會匹配第二。

#if TARGET_OS_IPHONE 
-(void)createColor:(UIColor*)color; 

#elif TARGET_OS_MAC 
-(void)createColor:(NSColor*)color; 

#endif 
4

兩個定義你說說設置爲根據您編譯什麼1或0! (在編譯時)

所以你是在正確的軌道在這裏我想

例如

#if TARGET_OS_IPHONE 
#import <CoreText/CoreText.h> 
#elif TARGET_OS_MAC 
#import <ApplicationServices/ApplicationServices.h> 
#endif 
5

當涉及到的UIColor/NSColor,我處理這樣的:

#if TARGET_OS_IPHONE 
#define ImageClassName UIImage 
#else 
#define ImageClassName NSImage 
#endif 

然後,在頭文件,如果你只是路過身邊的情況下,你可以使用例如ImageClassName *

當您需要使用UIColor/NSColor API時,在您的代碼中重複執行#if塊。

+0

哇,這個想法太棒了!謝謝,救了我的培根。 – SpaceDog 2014-05-28 10:36:05