2010-02-19 20 views
13

Come faccio a verificare che la chiave nel dizionario sia uguale alla stringa nel parametro method? nel codice sottostante, dictobj è l'oggetto NSMutableDictionary e per ogni chiave in dictobj ho bisogno di confrontarmi con la stringa. Come ottenere questo? Dovrei digitare typecase su NSString ??Controllo di uguaglianza in Objective-C

risposta

38

Quando si utilizza l'operatore ==, si confrontano i valori del puntatore. Questo funzionerà solo quando gli oggetti che stai confrontando 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 indicatori, quindi dovresti 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 di isEqual: più generale di NSObject. -isEqualToString: è una versione ottimizzata di -isEqual: da utilizzare 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 
      } 
    } 
} 
+0

superbo .. grazie mille Rob .. ha funzionato :) – suse