2011-08-10 14 views
5

Necesito obtener el número de versión de la aplicación del usuario y compararlo con la versión actual de la aplicación en mi servidor. Si la versión de la aplicación del usuario es inferior, recibirá una ventana emergente para actualizar su aplicación. Mientras hago esto, necesito comparar la versión de la aplicación con las versiones disponibles. ¿Cómo puedo comparar las cadenas que están en el formato "2.0.1" y "2.0.09" y obtener la más alta, en Objective-C?Comparando cadenas con el formato "2.0.1", "2.0.09"

Respuesta

5

No he probado esto (no en OS X ahora) así que esta es una toma completa en la oscuridad. ¿Qué le parece usar el método compare:options: de la clase NSString?

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

NSComparisonResult *r= [v1 compare:v2 options:NSNumericSearch]; 
if (r == NSOrderedSame || r == NSOrderedDescending) { 
    // do 
} else { 
    // do 
} 

¿Eso funciona?

4

Si las cuerdas son todos de la forma "2.0.1", etc. sólo se puede comparar con ellos al igual que las opciones correctas:

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

Lo anterior volvería "YES" si la hay localversion más antiguo que la versión actual en el servidor, y "NO" de lo contrario (suponiendo que tengo esto en la forma correcta).

Esto es lo que se suele hacer al verificar la versión local de iOS instalada en un iDevice.

+0

NSNumericSearch es una opción mucho mejor que hacerlo manualmente. – benzado

3

Respondido en esta publicación; Compare version numbers in Objective-C

Eche un vistazo a mi categoría NSString que implementa la comprobación de versión fácil en github; https://github.com/stijnster/NSString-compareToVersion

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

Esto devolverá un NSComparisonResult que es más precisa a continuación, utilizando;

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

Ayudantes también se agregan;

[@"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"]; 
+0

gracias Stijnster, su categoría es genial ... pero realmente va a necesitar una versión Swift ... – wuf810

Cuestiones relacionadas