Как динамически проверить наличие глобальных переменных в рамках? - PullRequest
1 голос
/ 25 июня 2010

Поскольку мое приложение для iPhone может работать как в ОС 3, так и в 4, мне нужен способ безопасного тестирования функций iOS 4 SDK.

Мне нравится избегать проверки строки [UIDevice ... systemVersion] (интересно, почему Apple не предоставила здесь числовое значение для простого тестирования, поскольку оно доступно в OS X).

Так или иначе. Обычный простой способ проверить возможности SDK - проверить, отвечает ли класс селектору, например:

if ([UIApplication instancesRespondToSelector:...

А для методов C просто проверяется, равен ли указатель функции NULL:

if (newFunction != NULL) ...

Но моя проблема в том, что мне нужно проверить, существует ли глобальная переменная. Например. вот этот:

extern NSString *const UIApplicationDidEnterBackgroundNotification __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);

Есть идеи, как можно проверить их существование во время выполнения?

Ответы [ 2 ]

2 голосов
/ 15 июня 2012

Извлечено из справочного документа «Руководство по совместимости SDK»:

Проверьте наличие внешней (внешней) константы или имени уведомления, явно сравнив ее адрес, а не собственное имя символа.в NULL или ноль.

Например, если вы хотите проверить ключ UIKeyboardFrameBeginUserInfoKey в словаре уведомлений клавиатуры, который доступен только в 3.2 и более поздних версиях, вы можете написать:

if (&UIKeyboardFrameBeginUserInfoKey) {
    blah;
} else {
    blah;
}
1 голос
/ 25 июня 2010

метод по умолчанию -

UIDevice* device = [UIDevice currentDevice];

BOOL backgroundSupported = NO;

if ([device respondsToSelector:@selector(isMultitaskingSupported)])

   backgroundSupported = device.multitaskingSupported;

Когда тест пройден, ваша глобальная переменная "оно существует в 4.x" должно быть доступно.

Кстати - он отвечает, если OS4 есть, если устройство поддерживает многозадачность. Manfred

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...