Как определить текущий iOS 4.1 или 4.2?
Возможный дубликат:
Проверить версию iPhone iOS
Я пробовал с этим кодом:
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_2_2)
NSLog(@"iPhone 4.2");
#endif
но когда я запускаю его снова на симуляторе 4.1, я все равно получаю журнал "iPhone 4.2" в консоли.
Спасибо, что помогли мне.
Тунг До
Ответы
Ответ 1
Вероятно, вам следует вообще не спрашивать о версии системы.
Лучшая конструкция спросит об определенной функции.
Например: if (NSClassFromString(@"UIPrintInfo"))
сообщит вам, поддерживает ли текущее устройство API печати, доступный в версии 4.2 или выше.
Таким образом, вы можете планировать свой код для использования функции, если она доступна, не на основе версии ОС.
Ответ 2
float version = [[[UIDevice currentDevice] systemVersion] floatValue];
Ответ 3
Или еще лучше:
CGFloat systemVersion = [[[ UIDevice currentDevice ] systemVersion ] floatValue ];
Затем вы можете выполнить простую проверку равенства, например.
if( systemVersion > 4.1 ){...}
Ответ 4
Вы можете сделать это либо во время компиляции, либо во время выполнения.
Для времени компиляции вы используете так называемые макросы доступности:
#if __IPHONE_OS_VERSION_MAX_ALLOWED > 40000 // __IPHONE_4_0
NSLog( @"After Version 4.0" );
#else
NSLog( @"Version 4.0 or earlier" );
#endif
Однако проблема с временем компиляции заключается в том, что вам нужно поддерживать несколько двоичных файлов. Если вы хотите, чтобы этот двоичный файл выполнялся на pre-4.x, вам следует использовать слабую ссылку на библиотеки iOS.
if(kCFCoreFoundationVersionNumber > kCFCoreFoundationVersionNumber_iPhoneOS_4_0)
{
NSLog( @"After Version 4.0" );
}
else
{
NSLog( @"Version 4.0 or earlier" );
}
Там хороший учебник:
http://cocoawithlove.com/2010/07/tips-tricks-for-conditional-ios3-ios32.html
Ответ 5
Правило 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
директивы compile-time будет только проверять, какая версия SDK вы создаете против, а какая версия ОС будет позже работать на.
Ответ 6
Это помогает?
http://blog.onstreamtv.de/?p=489
Ответ 7
попробуйте следующее:
NSString * v = [[[UIDevice currentDevice] systemVersion] substringToIndex:0];
больше ссылок:
http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIDevice_Class/Reference/UIDevice.html