2015-03-30 2 views
6

Я хочу получить текущую версию пользовательского устройства os для некоторого анализа в бэкэнд. Im пытается получить его, как показано ниже,Как получить правильную версию iOS программно?

[[[UIDevice currentDevice] systemVersion] floatValue]; **//not returning the minor version number** 

Когда я проверить это, запустив в моем iPhone, который оказывает IOS 8.0.2, этот апи возвращает меня 8.000000 как результат, но мне нужно указать точную версию IOS, которая является 8,0 .2

Любая помощь в устранении этой проблемы оценивается заранее.

+4

Обратите внимание, что «8.0.2» не является числовым значением, это строка. – zaph

+1

Возможный дубликат [Как проверить версию iOS?] (Http://stackoverflow.com/questions/3339722/how-to-check-ios-version) – thegrinner

ответ

11

В прошивке 8 и выше, вы можете использовать:

[[NSProcessInfo processInfo] operatingSystemVersion] 

Если вы хотите, чтобы проверить наличие этого конкретного API, то есть лучшим способ, чем проверки версий операционной системы, как описано here.

7

вы можете получить его с этим, в формате NSString:

[UIDevice currentDevice].systemVersion 

правка

PS

вы изменили свой вопрос ... теперь мой ответ не имеет больше смысла. .. в следующий раз добавить новые строки с явным Редактировать, чтобы все понимали тему вопроса/ответов, please

+0

UP для объяснения :) – ersentekin

0
NSString *osVersion = [[UIDevice currentDevice] systemVersion]; 
+0

Благодарим вас за этот фрагмент кода, которые могут оказать немедленную помощь. Правильное объяснение [значительно улучшило бы] (https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) его образовательную ценность, показывая, почему это является хорошим решением проблемы, и сделать его более полезным для будущих читателей с похожими, но не идентичными вопросами. Измените свой ответ, чтобы добавить объяснения, и укажите, какие ограничения и допущения применяются. – basvk

0

Objective C

// define macro 
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 

затем использовать так:

if (SYSTEM_VERSION_LESS_THAN(@"10.0")){ 
    //your code here 
} 
0

может быть не более элегантное решение когда-либо, но это, безусловно, делает работу, так что вы можете попробовать что-то подобное ObjC:

- (NumVersion)systemVersion { 
    NSArray *_separated = [[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."]; 
    NumVersion _version = { 0, 0, 0, 0 }; 
    if (_separated.count > 3) _version.stage = [[_separated objectAtIndex:3] integerValue]; 
    if (_separated.count > 2) _version.nonRelRev = [[_separated objectAtIndex:2] integerValue]; 
    if (_separated.count > 1) _version.minorAndBugRev = [[_separated objectAtIndex:1] integerValue]; 
    if (_separated.count > 0) _version.majorRev = [[_separated objectAtIndex:0] integerValue]; 
    return _version; 
} 

затем:

NumVersion version = [self systemVersion]; 
NSLog(@"%d, %d, %d, %d", version.majorRev, version.minorAndBugRev, version.nonRelRev, version.stage); 

напечатает (в моем случае в тот самый момент):

11, 0, 2, 0 

, что вы были бы в состоянии преобразовать в более желательный формат для аналитики.

Смежные вопросы