2015-11-04 249 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