2010-02-19 18 views
13

Sözlükteki anahtarın, yöntem parametresindeki dizeyle aynı olduğunu nasıl kontrol ederim? aşağıdaki kodda, dictobj, NSMutableDictionary'ın nesnesidir ve dictobj'deki her anahtar için dizeyle karşılaştırmalıyım. Bunu nasıl başarabilirim? NSString'e anahtar yazmalı mıyım?Nesne-C'de eşitlik denetimi

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

cevap

38

== işlecini kullandığınızda, işaretçi değerlerini karşılaştırıyorsunuz. Bu sadece karşılaştırma yaptığınız nesneler aynı bellek adresinde aynı nesne olduğunda çalışır. Eğer dizeleri karşılaştırdığımızda

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

, genellikle dizeleri metinsel içerik karşılaştırmak yerine istiyorum: dizeleri aynı olmasına rağmen, onlar bellekte farklı yerlerde saklanır çünkü Örneğin, bu kod These objects are different dönecektir onların işaretçileri, yani NSString'un -isEqualToString: yöntemini kullanmalısınız. o dize nesnelerin değerini karşılaştırır bu kod yerine kendi işaretçi değerlerinden daha These strings are the same döndürür:

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

karşılaştırmak keyfi Objective-C Eğer NSObject daha genel isEqual: yöntemi kullanmalısınız nesneleri. -isEqualToString:, her iki nesnenin de NSString nesnesi olduğunu bilmeniz gereken, -isEqual:'un optimize edilmiş bir sürümüdür.

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

superb .. çok teşekkürler Rob .. işe yaradı :) – suse