【问题标题】:Preventing duplicate entry messages防止重复输入消息
【发布时间】:2015-11-04 01:01:15
【问题描述】:

我有两个几乎相同的类,但一个是为 OS X 制作的,另一个是为 iOS 制作的。然后我有一个这样的头文件:

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

问题是因为这两个类都包含在项目中,xcode 编译两者,我有很多重复的错误条目,因为方法在两个类上具有相同的名称。

有没有办法阻止一个类编译,即使它包含在项目中,除非该类是为目标设计的?

是的,我知道我可以从目标中包含/排除类,但我正在处理双方和多个目标中的数百个类,这会产生很多最终会出错的包含/排除操作。我想知道如果目标正确,代码中是否有一些解决方案可以只允许类编译。

【问题讨论】:

    标签: ios objective-c macos class cocoa


    【解决方案1】:

    使用目标最适合您的情况。但是你可以在代码中做到这一点

    注意在 target->Build Settings 的 Preprocessor Macros 中添加或删除 __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
    

    【讨论】:

    • 这个答案的第一句话很重要:“使用目标最适合您的情况”。这就是目标的用途。有一个 OS X 目标,一个 iOS 目标,为每个目标添加适当的源文件。如果由于某种原因这不起作用,那么只有在那时,提交一个错误并遵循上面给出的其余解决方案。您不使用目标的理由对我来说毫无意义;在所有源文件中维护#ifdefs 与使用目标一样复杂且容易出错,在这两种情况下,如果操作不正确,则会出现构建错误,因此正确维护目标很容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 2011-10-25
    • 2011-06-12
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多