Должно делать что-то вроде следующего:
NSDictionary *userInfo; // Assuming this is a dictionary
NSString *newVersionString = userInfo[@"gcm.notification.version"];
newVersionString = [newVersionString stringByReplacingOccurrencesOfString:@"." withString:@""];
NSInteger newVersion = [[[NSDecimalNumber alloc] initWithString:newVersionString] integerValue];
NSString *currentVersionString = [[NSUserDefaults standardUserDefaults] valueForKey:@"currentAppVersion"];
currentVersionString = [currentVersionString stringByReplacingOccurrencesOfString:@"." withString:@""];
NSInteger currentVersion = [[[NSDecimalNumber alloc] initWithString:currentVersionString] integerValue];
if(newVersion > currentVersion) {
//code here
}
Но это не то, как вы сравниваете версии.Проблема в том, что, например, 1.11.1
равно 11.1.1
.Или, другими словами, в любом случае переставьте точки, но если количество цифр и их порядок не изменятся, вы обнаружите, что это та же версия.Вы должны сделать это для каждого компонента (как в Swift, так и в Objective-C):
NSDictionary *userInfo;
NSArray<NSString *> *newComponents = [userInfo[@"gcm.notification.version"] componentsSeparatedByString:@"."];
NSString *currentVersionString = [[NSUserDefaults standardUserDefaults] valueForKey:@"currentAppVersion"];
NSArray<NSString *> *currentComponents = [currentVersionString componentsSeparatedByString:@"."];
BOOL newVersionIsGreater = NO;
if(newComponents.count != currentComponents.count) newVersionIsGreater = newComponents.count > currentComponents.count;
else {
for(int i=0; i<newComponents.count; i++) {
NSInteger newInteger = [[[NSDecimalNumber alloc] initWithString:newComponents[i]] integerValue];
NSInteger currentInteger = [[[NSDecimalNumber alloc] initWithString:currentComponents[i]] integerValue];
if(newInteger != currentInteger) {
newVersionIsGreater = newInteger > currentInteger;
break;
}
}
}
if(newVersionIsGreater) {
//code here
}
Теперь он проверяет, есть ли у нас одинаковое количество компонентов в обоих случаях, а затем выполняет итерацию по ним.Первый компонент, который отличается, сообщит об изменении.