2010-02-19 15 views
13

Wie überprüfe ich, ob der Schlüssel im Dictionary der gleiche ist wie der String im Methodenparameter? . Doctobj ist das Objekt von NSMutableDictionary, und für jeden Schlüssel in dictobj muss ich mit String vergleichen. Wie erreiche ich das? Sollte ich Schlüssel auf NSString type ??Überprüfung auf Gleichheit in Objective-C

-(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 
      } 
    } 
} 

Antwort

38

Wenn Sie den Operator == verwenden, vergleichen Sie Zeigerwerte. Dies funktioniert nur, wenn die Objekte, die Sie vergleichen, genau dasselbe Objekt sind, an der gleichen Speicheradresse. Zum Beispiel wird dieser Code These objects are different zurückkehren, denn obwohl die Saiten gleich sind, sie an verschiedenen Orten im Speicher abgelegt sind:

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

Wenn Sie Strings vergleichen, Sie wollen in der Regel den Textinhalt der Saiten zu vergleichen, anstatt ihre Zeiger, so sollten Sie die -isEqualToString: Methode von NSString. Dieser Code wird These strings are the same zurück, weil sie den Wert der String-Objekte vergleicht, anstatt ihre Zeigerwerte:

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

Zum Vergleich beliebigen Objective-C-Objekte Sie die allgemeinere isEqual: Methode der NSObject verwenden sollten. -isEqualToString: ist eine optimierte Version von -isEqual:, die Sie verwenden sollten, wenn Sie beide Objekte NSString Objekte kennen.

- (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

hervorragend .. vielen Dank Rob .. es hat funktioniert :) – suse

Verwandte Themen