2015-11-04 114 views
0

我有兩個幾乎完全相同的類,但一個是爲OS X製作的,另一個是爲iOS製作的。然後,我有一個頭文件是這樣的:防止重複輸入消息

#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 
#import "ClassForOSX.h" 
#else 
#import "ClassForIOS.h" 
#endif 

問題是因爲這兩個類都包含在該項目中,Xcode的編譯都和我有很多的錯誤重複條目,因爲方法有相同的名字兩個班。

是否有辦法阻止類編譯,即使它包含在項目中,除非該類是針對目標的?

是的我知道我可以從目標中包含/排除類,但是我正在處理數百個雙方和多個目標類,並且會產生很多包含/排除操作,最終會出錯。我想知道在代碼中是否有一些解決方案,如果目標是正確的,就可以允許類進行編譯。

回答

1

使用目標最適合您的情況。但你可以做到這一點在代碼

注意添加或預處理宏在靶刪除__MAC_OS_X_VERSION_MIN_REQUIRED>構建設置

ClassForIOS.h文件

#ifndef __MAC_OS_X_VERSION_MIN_REQUIRED 

#import <Foundation/Foundation.h> 

@interface ClassForIOS : NSObject 

// interface 

@end 

#endif 

ClassForIOS.m文件

#ifndef __MAC_OS_X_VERSION_MIN_REQUIRED 

#import "ClassForIOS.h" 

@implementation ClassForIOS 

// implementation code 

@end 

#endif 

ClassForOSX.h文件

#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 

#import <Foundation/Foundation.h> 

@interface ClassForOSX : NSObject 

// interface 

@end 

#endif 

ClassForOSX.m文件

#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 

#import "ClassForOSX.h" 

@implementation ClassForOSX 

// implementation code 

@end 

#endif 
+0

我認爲你是對的。這是最好的方式。謝謝!!!!!!! – SpaceDog

+0

這個答案的第一句話很重要:「使用目標最適合你的情況」。這是目標所針對的。針對iOS的一個目標OS X有一個目標,將相應的源文件添加到每個目標。如果由於某種原因無法正常工作,那麼只有在這之後,請提交一個錯誤並遵循上面給出的其他解決方案。你不使用目標的理由對我來說毫無意義。在所有源文件中維護#ifdefs與使用目標一樣複雜且容易出錯,並且在這兩種情況下,如果您不正確執行此操作,則會出現構建錯誤,因此正確維護目標很容易。 – bhaller