2011-12-22 8 views
6

Tôi có một lớp học có phương pháp có thể truy cập trả lại số NSString khi được gọi.Nếu "a == b" là sai khi so sánh hai đối tượng NSString

[MyClass getMyString] 

Biến chuỗi trong lớp đó là thực sự được giao trong didSelectRowAtIndexPath: phần của một bảng như thế này:

myString = cell.textLabel.text; 

Khi tôi lấy chuỗi bằng cách gọi phương pháp đó, tôi gán nó vào một chuỗi trong lớp được gọi là nó và so sánh nó với một chuỗi mà tôi đã xác định

NSString *mySecondString; 
mySecondString = @"my value"; 

if(mySecondString == myString){ 
    i = 9; 
} 

Tôi đã bước qua mã và mỗi khi nó đánh giá câu lệnh if, nó s kips phải qua i=9 và chuyển đến câu lệnh else if tiếp theo. Tại sao điều này lại là? Tại sao họ không đánh giá được cùng một giá trị? Nếu bạn di chuột qua từng giá trị trong quá trình gỡ lỗi, chúng sẽ hiển thị chúng có cùng giá trị, nhưng mã vì một số lý do không làm như tôi mong đợi và chỉ định 9 đến i.

Mọi suy nghĩ?

+0

Tôi ngạc nhiên khi tìm kiếm trên trang web này không mang lại bất kỳ kết quả nào. Câu hỏi này đã được hỏi và trả lời nhiều lần trong quá khứ. – dreamlax

+0

Có lẽ tôi đã không hỏi nó đúng cách khi tôi tìm kiếm trước khi tôi hỏi ... - đã thấy rất nhiều câu hỏi mà xử lý với CFString và gán nó cho NSString, nhưng không thấy những gì Kevin Ballard nhanh chóng trả lời dưới đây. Cảm ơn! – MeisterPlans

+0

có thể trùng lặp của [Hiểu so sánh NSString] (http://stackoverflow.com/questions/3703554/understanding-nsstring-comparison) –

Trả lời

17

Bạn giả định rằng toán tử C == thực hiện chuỗi bình đẳng. Nó không. Nó làm con trỏ bình đẳng (khi được gọi trên con trỏ). Nếu bạn muốn làm một bài kiểm tra bình đẳng chuỗi thực bạn cần phải sử dụng các phương pháp -isEqual: (hoặc chuyên môn hóa -isEqualToString: khi bạn biết cả hai đối tượng là chuỗi):

if ([mySecondString isEqualToString:myString]) { 
    i = 9; 
} 
+0

CÓ !!! Cảm ơn bạn!! Đó là vấn đề chính xác! – MeisterPlans

2

bạn không thể sử dụng '==' để so sánh hai NSString

bạn nên sử dụng [NSString isEqualToString: (NSString *)] để so sánh hai chuỗi con trỏ

3

bạn đang so sánh với chuỗi, chứ không phải là chuỗi tự. Bạn cần thay đổi mã của mình thành

if (if([mySecondString isEqualToString:myString]) { 
    .... 
} 
1

Bạn không thể so sánh hai chuỗi bằng cách sử dụng "==" giá trị này dành cho int và các giá trị khác. bạn có thể sử dụng dưới mã cho so sánh hai chuỗi

if ([Firststring isEqualToString: Secondstring]) {

NSLog(@"Hello this both string is same "); 

}

1

Đó là một khái niệm cơ bản của con trỏ, bạn đang thiếu. (YES, myStringmySecondString là các con trỏ tới chuỗi).

Bây giờ, if(mySecondString == myString) sẽ chỉ TRUE chỉ khi, cả hai con trỏ trỏ đến cùng một vị trí. (Mà chúng sẽ không trong hầu hết các trường hợp)

Bạn nên làm if ([mySecondString isEqualToString:myString]), sẽ so sánh nội dung của cả hai chuỗi để bình đẳng.