Прежде чем спросить, почему: Я пишу расширение, которое наблюдает за 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
Предложения?
Спасибо, я искал, но ничего не придумал. – CokePokes