Правило 1: Не зависит от версии или типа устройства, чтобы определить, доступна ли функция. Различные устройства (iPhone, iPod Touch и iPad) могут получать ту же функцию, но в разных версиях ОС. Ссылка слабо на рамки и отсутствующие классы будет nil
. Или используйте NSClassFromString()
функция, которая также возвращает nil
, если класс не существует. Также используйте -[NSObject respondsToSelector:]
для запроса, существует ли метод или нет.
Правило 2: Apple не рекомендует использовать определенные константы (например, __IPHONE_2_2
) при проверке версий, вместо того, чтобы использовать их численные значения, как, например:
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 40200)
NSLog(@"BUILT against iPhone 4.2 or later");
#endif
Но обратите внимание, используя #if
время компиляции директива только проверит, какая версия SDK вы построить против не какая версия ОС будет позже работает на.
И 4.1, и 4.2 являются ≥ 2.2. – kennytm
# если/# endif are * время компиляции * директивы. Все, что они делают, сравнивается с вашими настройками сборки, чтобы увидеть, какую версию ОС вы нацеливаете. Но тот же код будет выводиться независимо от того, на какой ОС вы работаете. Вы хотите проверить * время выполнения. – benzado
Попробуйте следующее: http://jayprakashdubey.blogspot.in/2014/07/check-device-os-version.html –