Cuando utiliza el operador ==
, está comparando valores de puntero. Esto solo funcionará cuando los objetos que comparas sean exactamente el mismo objeto, en la misma dirección de memoria. Por ejemplo, el código volverá These objects are different
porque a pesar de las cuerdas son los mismos, se almacenan en diferentes ubicaciones en la memoria:
NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if(foo == bar)
NSLog(@"These objects are the same");
else
NSLog(@"These objects are different");
Cuando se comparan cadenas, normalmente se desea comparar el contenido textual de las cuerdas en lugar de sus punteros, por lo que debe el método -isEqualToString:
de NSString
. Este código volverá These strings are the same
porque compara el valor de los objetos de cadena en lugar de sus valores de puntero:
NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if([foo isEqualToString:bar])
NSLog(@"These strings are the same");
else
NSLog(@"These string are different");
Para comparar arbitraria objetos Objective-C se debe utilizar el método más general isEqual:
de NSObject
. -isEqualToString:
es una versión optimizada de -isEqual:
que debe usar cuando sepa que ambos objetos son objetos NSString
.
- (void)CheckKeyWithString:(NSString *)string
{
//foreach key in NSMutableDictionary
for(id key in dictobj)
{
//Check if key is equal to string
if([key isEqual:string])
{
//do some operation
}
}
}
superb .. gracias mucho Rob ... funcionó :) – suse