2014-02-18 2 views
0

Прежде чем спросить, почему: Я пишу расширение, которое наблюдает за CFBundleVersion приложения &, а затем сравнивает его со старой версией, которая не поддерживается расширением.Конвертировать CFBundleVersion в NSNumber и сравнить его

Вот что я делаю, чтобы сравнить.

CFStringRef _version = CFURLCreateStringByAddingPercentEscapes(NULL, 
                   (__bridge CFStringRef)[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"], 
                   NULL, 
                   (CFStringRef)@" !*'();:@&=+$,/?%#[]", 
                   kCFStringEncodingUTF8); 

NSString *versionString = (NSString *)CFBridgingRelease(_version); 

NSNumberFormatter * nsFormatter = [[NSNumberFormatter alloc] init]; 
[nsFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 

NSNumber * installedVersion = [nsFormatter numberFromString:versionString]; 
NSNumber * incompatibleVersion = [nsFormatter numberFromString:@"6.1.0"]; 


if (installedVersion <= incompatibleVersion) { 

    NSLog(@"This was triggered"); 

} 

Код работает отлично, но только при наличии двух десятичных знаков. Например, если я установил CFBundleVersion в 6.0 или 5.0 Код не запускается. Есть ли лучший способ сравнения? Я не понимаю, почему это думает 5.0 больше, чем 6.1.0

Предложения?

+0

Спасибо, я искал, но ничего не придумал. – CokePokes

ответ

2

Вы, очевидно, не можете рассматривать его как одно число, поэтому относитесь к нему как к набору чисел с разделителем. Затем вы можете использовать componentsSeparatedByString:@"." и обрабатывать каждый из номеров отдельно.

Обязательно проверьте количество компонентов. Если один номер имеет больше компонентов, чем другой, вы должны вернуться к значениям по умолчанию (0), если вы еще не получили результат от алгоритма.

Прокрутите компоненты и сравните каждую деталь.

2

Версии в формате major.minor.patch обычно не могут быть представлены как один номер. Лучше всего сравнить строки, используя ...

[version1 compare:version2 options:NSNumericSearch]; 

Это работает только в том случае, если количество компонентов всегда одинаково.

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