Pregunta

¿Cómo puedo comprobar la llave en el diccionario es igual que la cadena de parámetro de método? es decir por debajo de código, dictobj es objeto de NSMutableDictionary, y para cada clave en dictobj i necesidad de comparar con una cuerda. ¿Cómo lograr esto? ¿Debo Typecase clave para 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
          }
     }
}
¿Fue útil?

Solución

Cuando se utiliza el operador ==, que está comparando valores de puntero. Esto sólo funciona cuando los objetos se están comparando son 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, por lo general, que desee comparar el contenido textual de las cuerdas en lugar de sus punteros, por lo que debe el método de -isEqualToString: 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 de Objective-C objetos que puedes usar el método isEqual: más general de NSObject. -isEqualToString: es una versión optimizada de -isEqual: que se debe utilizar cuando se sabe 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
          }
     }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top