Pergunta

Como verificar a chave no dicionário é a mesma que a string no parâmetro do método? ou seja, no código abaixo, o dictobj é o objeto do NSMutabledictionary e, para cada chave no dictobj, preciso comparar com a string. Como conseguir isso? Devo digitar a chave 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
          }
     }
}
Foi útil?

Solução

Quando você usa o == Operador, você está comparando valores de ponteiro. Isso só funcionará quando os objetos que você está comparando forem exatamente o mesmo objeto, no mesmo endereço de memória. Por exemplo, este código retornará These objects are different Porque, embora as cordas sejam iguais, elas são armazenadas em diferentes locais na memória:

NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if(foo == bar)
    NSLog(@"These objects are the same");
else
    NSLog(@"These objects are different");

Quando você compara seqüências -isEqualToString: método de NSString. Este código retornará These strings are the same Porque compara o valor dos objetos da string em vez dos valores do ponteiro:

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 Arbitrários Objetivos-C, você deve usar o mais geral isEqual: método de NSObject. -isEqualToString: é uma versão otimizada de -isEqual: que você deve usar quando souber que os dois objetos são NSString objetos.

- (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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top