2010-02-19 34 views
13

Làm cách nào để kiểm tra khóa trong từ điển giống với chuỗi trong tham số phương thức? tức là ở dưới mã, dictobj là đối tượng của NSMutableDictionary, và cho mỗi khóa trong dictobj tôi cần phải so sánh với chuỗi. Làm thế nào để đạt được điều này? Tôi có nên gõ phím để NSString ??Kiểm tra tính bình đẳng trong Mục tiêu-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 
      } 
    } 
} 

Trả lời

38

Khi bạn sử dụng toán tử ==, bạn đang so sánh giá trị con trỏ. Điều này sẽ chỉ hoạt động khi các đối tượng bạn so sánh chính xác là cùng một đối tượng, tại cùng một địa chỉ bộ nhớ. Ví dụ, đoạn mã này sẽ trở lại These objects are different vì mặc dù các dây là như nhau, chúng được lưu trữ tại các địa điểm khác nhau trong bộ nhớ:

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

Khi bạn so sánh chuỗi, bạn thường muốn so sánh nội dung văn bản của chuỗi hơn con trỏ của chúng, vì vậy bạn nên sử dụng phương thức -isEqualToString: của NSString. Mã này sẽ trở These strings are the same vì nó so sánh giá trị của các đối tượng chuỗi chứ không phải là giá trị con trỏ của họ:

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

Để so sánh tùy ý Objective-C đối tượng bạn nên sử dụng phương pháp isEqual: tổng quát hơn của NSObject. -isEqualToString: là phiên bản được tối ưu hóa của -isEqual: mà bạn nên sử dụng khi bạn biết cả hai đối tượng là đối tượng 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

tuyệt vời .. cảm ơn rất nhiều Rob .. nó đã hoạt động :) – suse

Các vấn đề liên quan