Comprobando la igualdad en Objective-C

¿Cómo verifico que la clave en el diccionario es la misma que la cadena en el parámetro del método? es decir, en el código de abajo, dictobj es el objeto de NSMutableDictionary, y para cada clave en dictobj necesito compararlo con una cadena. ¿Cómo lograr esto? ¿Debo escribir la clave de NSString?

-(void)CheckKeyWithString:(NSString *)string { //foreach key in NSMutableDictionary for(id key in dictobj) { //Check if key is equal to string if(key == string)// this is wrong since key is of type id and string is of NSString,Control doesn't come into this line { //do some operation } } } 

Cuando usa 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, este código devolverá These objects are different porque aunque las cadenas son las mismas, 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 compara cadenas, generalmente desea comparar el contenido textual de las cadenas en lugar de sus punteros, por lo que debe -isEqualToString: método -isEqualToString: de NSString . Este código devolverá 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 objetos Objective-C arbitrarios, debe usar el método isEqual: más general 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 } } }