Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Objective-C中是否有测试#导入文件的通用方法_Objective C_Import_C Preprocessor - Fatal编程技术网

在Objective-C中是否有测试#导入文件的通用方法

在Objective-C中是否有测试#导入文件的通用方法,objective-c,import,c-preprocessor,Objective C,Import,C Preprocessor,我正在研究核心数据功能的扩展。我有一个代码块,我想测试用户的nsapplicationelegate是否实现了模板化的managedObjectContext访问器。但我不希望需要AppKit框架或NSApplication(我可能会在命令行应用程序中使用该功能),因此我希望将该块包装在#ifdef中 查看NSApplication.h,NSAppKit版本有#defines(例如NSAppKitVersionNumber10\u 0)。我可以测试其中任意一个,但感觉不太对。在预处理器中是否有一

我正在研究核心数据功能的扩展。我有一个代码块,我想测试用户的
nsapplicationelegate
是否实现了模板化的
managedObjectContext
访问器。但我不希望需要AppKit框架或
NSApplication
(我可能会在命令行应用程序中使用该功能),因此我希望将该块包装在
#ifdef


查看NSApplication.h,NSAppKit版本有
#define
s(例如
NSAppKitVersionNumber10\u 0
)。我可以测试其中任意一个,但感觉不太对。在预处理器中是否有一种通用方法来测试当前编译环境是否包含框架或特定头?

否,没有,因为:

  • C预处理器不跟踪它包含的文件——它只是包含它们并继续前进
  • 预处理器本身没有“框架”的概念,它们甚至直到链接阶段才被引入
  • AppKit版本的测试是在预处理器中执行此类操作的惯用方法

    但是,我不明白为什么需要预处理器

    BOOL delegateImplementsAccessor = [[[NSClassFromString(@"NSApplication") sharedApplication] delegate] respondsToSelector:@selector(managedObjectContext)];
    

    你建议使用NSClassFromString效果很好,但我对你的第一个断言感到困惑<代码>#导入保证头文件的单一执行。必须以某种方式进行跟踪,即使只是测试是否存在预编译头。@Seamus:很可能预处理器维护一个包含文件的内部列表,但它不必提供该列表的接口。对。是否有一个接口,以该数据是几乎我所追求的。