Frage

Wie kann ich den Schlüssel im Wörterbuch als String in Methodenparameter gleich ist? das heißt in folgenden Code, dictobj ist NSMutableDictionary des Objekts und für jeden Schlüssel in dictobj muss ich mit einer Schnur vergleichen. Wie dies zu erreichen? Sollte ich Setzkasten Schlüssel zu 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
          }
     }
}
War es hilfreich?

Lösung

Wenn Sie den == Operator verwenden, vergleichen Sie Zeigerwerte. Dies funktioniert nur, wenn die Objekte, die Sie vergleichen sind genau das gleiche Objekt, 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 werden:

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, möchten Sie in der Regel den Textinhalt der Saiten zu vergleichen, anstatt ihre Zeiger, so sollten Sie die -isEqualToString: Methode von NSString. Dieser Code wird wieder These strings are the same, weil es der Wert der Zeichenfolge vergleicht Objekte 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 des NSObject verwenden sollten. -isEqualToString: ist eine optimierte Version von -isEqual:, die Sie verwenden sollten, wenn Sie wissen beide Objekte sind NSString Objekte.

- (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
          }
     }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top