2011-03-29 21 views
6

Estoy probando una cadena con otra, y noto que si la primera cadena es nula, el valor devuelto es igual a NSOrderedSame (valorizado a 0).iPhone - Comparar NSString nil con otro valor NSString devuelve NSOrderedSame

if([oneString compare:otherString] == NSOrderedSame) devuelve SÍ si oneString es nulo.

así que debería probar if(oneString != nil && [oneString compare:otherString] == NSOrderedSame)

supongo que también debería probar otherString en el estado, y hacer un caso especial si quiero que [nil compare:nil] vuelve NSOrderedSame.

¿Existe una manera más conveniente de comparar cadenas sin tener que hacer tales pruebas y realmente probar si ambas cadenas son las mismas?

Respuesta

11

Usted puede intentar

[someString isEqualToString:@"someOtherString"]; 

O para el caso insensible:

[[someString lowerCaseString] isEqualToString:[otherString lowerCaseString]]; 
3

me gustaría utilizar el enfoque sugiere @seretur a menos que esté preocupado por caso. En ese caso, utilizaría caseInsensitiveCompare:, que es similar al método compare: que está utilizando actualmente.

También puede simplificar que si la declaración de este modo:

if (oneString && [oneString caseInsensitiveCompare:otherString] == NSOrderedSame) { ... 
1

Es absolutamente legal enviar algo a nitl. Pero, por definición, siempre devolverá cero. y nada en sí actually is 0.

Si hacemos now look at NSComparisonResult, NSOrderedSame es 0 demasiado.

enum { 
    NSOrderedAscending = -1, 
    NSOrderedSame, 
    NSOrderedDescending 
}; 
typedef NSInteger NSComparisonResult;