Сравнение строк с форматом "2.0.1", "2.0.09" - PullRequest
6 голосов
/ 10 августа 2011

Мне нужно получить номер версии приложения пользователя и сравнить его с текущей версией приложения на моем сервере. Если версия приложения пользователя ниже, он получит всплывающее окно для обновления своего приложения. При этом мне нужно сравнить версию приложения с доступными версиями. Как я могу сравнить строки в формате "2.0.1" и "2.0.09" и получить самую высокую в Objective-C?

Ответы [ 3 ]

6 голосов
/ 10 августа 2011

Как насчет использования метода compare:options: класса NSString?

NSString *v1 = @"2.0.1";
NSString *v2 = @"2.1";

NSComparisonResult result = [v1 compare:v2 options:NSNumericSearch];
if (result == NSOrderedSame || result == NSOrderedDescending) {
    // do
} else {
    // do
}
4 голосов
/ 10 августа 2011

Если все ваши строки имеют форму "2.0.1" и т. Д., Вы можете просто сравнить их как есть с правильными параметрами:

([localVersionString compare:currentVersionString
                     options:NSNumericSearch] != NSOrderedAscending);

Приведенное выше вернет "YES", еслиlocalVersion не старше, чем currentVersion на сервере, и «NO» в противном случае (при условии, что это правильно).

Обычно это делается при проверке локальной версии установленной iOS.на iDevice.

3 голосов
/ 01 сентября 2014

Как ответили в этом посте; Сравните номера версий в Objective-C

Проверьте мою категорию NSString, которая реализует простую проверку версий на github;https://github.com/stijnster/NSString-compareToVersion

[@"1.2.2.4" compareToVersion:@"1.2.2.5"];

Это вернет NSComparisonResult , который точнее, чем использование;

[@"1.2.2" compare:@"1.2.2.5" options:NSNumericSearch]

Также добавлены помощники;

[@"1.2.2.4" isOlderThanVersion:@"1.2.2.5"];
[@"1.2.2.4" isNewerThanVersion:@"1.2.2.5"];
[@"1.2.2.4" isEqualToVersion:@"1.2.2.5"];
[@"1.2.2.4" isEqualOrOlderThanVersion:@"1.2.2.5"];
[@"1.2.2.4" isEqualOrNewerThanVersion:@"1.2.2.5"];
...