Domanda

Come faccio a verificare la chiave nel dizionario è uguale alla stringa nel parametro del metodo? vale a dire in seguito il codice, dictobj è oggetto di NSMutableDictionary, e per ogni chiave in dictobj ho bisogno di confrontare con lo spago. Come raggiungere questo obiettivo? Dovrei Typecase chiave per 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
          }
     }
}
È stato utile?

Soluzione

Quando si utilizza l'operatore ==, si confrontano i valori del puntatore. Questo funziona solo quando gli oggetti si confrontano sono esattamente lo stesso oggetto, allo stesso indirizzo di memoria. Ad esempio, il codice restituirà These objects are different perché anche se le stringhe sono le stesse, sono memorizzati in luoghi diversi in memoria:

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

Quando si confrontano le stringhe, di solito si vuole confrontare il contenuto testuale delle stringhe piuttosto che i loro puntatori, così si dovrebbe il metodo -isEqualToString: di NSString. Questo codice restituirà These strings are the same perché mette a confronto il valore degli oggetti stringa piuttosto che i loro valori di puntatore:

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

Per confrontare arbitraria Objective-C oggetti si dovrebbe utilizzare il metodo isEqual: più generale di NSObject. -isEqualToString: è una versione ottimizzata di -isEqual: che si dovrebbe usare quando si sa che entrambi gli oggetti sono oggetti 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
          }
     }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top