Есть ли общий метод для проверки файла #imported в Objective-C - PullRequest
0 голосов
/ 27 декабря 2010

Я работаю над расширением функциональности Core Data. У меня есть блок кода, в котором я хотел бы проверить, реализует ли пользователь NSApplicationDelegate шаблонный метод доступа managedObjectContext. Но я не хочу требовать инфраструктуры AppKit или NSApplication (я мог бы использовать эту функциональность в приложениях командной строки), поэтому я бы хотел обернуть блок в #ifdef.

Глядя на NSApplication.h, есть #define s для версий NSAppKit (например, NSAppKitVersionNumber10_0). Я мог бы проверить любой из них, но это не совсем правильно. Есть ли в препроцессоре общий способ проверить, включает ли текущая среда компиляции каркас или определенный заголовок?

1 Ответ

1 голос
/ 27 декабря 2010

Нет, нет, потому что:

  1. Препроцессор C не отслеживает файлы, которые он включил - он просто включает их и перемещается на
  2. Препроцессор не имеет понятия "каркасы" как таковые, и они даже не вводятся до стадии связывания

Тест для версии AppKit - идиоматический способ сделать подобные вещи в препроцессоре.

Однако я не понимаю, зачем вам для этого нужен препроцессор.

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