2010-04-07 42 views
57

Tôi hiện đã có một máy chủ web được thiết lập mà tôi liên lạc qua SOAP với ứng dụng iPhone của mình. Tôi đang trả về một chuỗi có chứa một GUID và khi tôi cố gắng để so sánh điều này với một chuỗi tôi nhận được một số kết quả lạ.So sánh chuỗi trong Mục tiêu-C

Tại sao điều này không kích hoạt? Chắc chắn hai dây là một trận đấu?

NSString *myString = @"hello world"; 

if(myString == @"hello world") 
    return; 
+1

Câu hỏi này hiện nay hầu như vô dụng vì ảnh chụp màn hình đã biến mất. Đây là lý do tại sao mã nên được dán sao chép vào các câu hỏi. –

+0

Ảnh chụp màn hình là lỗi tôi nghĩ, nhưng câu trả lời được đưa ra như 2 năm trước! –

+1

Nhưng không có người đọc nào trong tương lai có thể thấy lỗi hoặc mã bạn đang sử dụng để biết liệu nó có giống với lỗi của họ hay không, điều này có nghĩa là câu hỏi này không thể giúp bất kỳ ai khác. –

Trả lời

147

Sử dụng phương pháp -isEqualToString: để so sánh giá trị của hai chuỗi. Sử dụng toán tử C == sẽ đơn giản so sánh địa chỉ của các đối tượng.

if ([category isEqualToString:@"Some String"]) 
{ 
    // Do stuff... 
} 
+1

AH! Cám ơn bạn rất nhiều. Cảm thấy như một chút của một kẻ ngốc trên này! –

+2

Đoán của tôi là trong ObjectiveC++ bạn có thể tạo một toán tử quá tải để cung cấp cho bạn khả năng cú pháp có khả năng sử dụng == nhưng không lập trình C mục tiêu nào làm điều này, vì == chỉ được sử dụng để kiểm tra danh tính trong các đối tượng C mục tiêu. –

41

Bạn có thể sử dụng so sánh phân biệt chữ hoa hoặc chữ thường, tùy thuộc vào những gì bạn cần. Case-nhạy cảm là như thế này:

if ([category isEqualToString:@"Some String"]) 
{ 
    // Both strings are equal without respect to their case. 
} 

Case-nhạy cảm là như thế này:

if ([category compare:@"Some String" options:NSCaseInsensitiveSearch] == NSOrderedSame) 
{ 
    // Both strings are equal with respect to their case. 
} 
+1

Tôi nghĩ rằng cần: ([so sánh danh mục: @ "Một số chuỗi" tùy chọn: NSCaseInsensitiveSearch] == NSOrderedSame) – JaakL

+7

Hãy cẩn thận với hàm "so sánh" vì nếu chuỗi (trong trường hợp này "danh mục") là không, so sánh sẽ luôn trả về NSOrderedSame. – nh32rg

+0

Đó là một điểm tuyệt vời @ nh32rg !! +1 cho điều đó! Liệu isEqualToString có cùng một vấn đề? – badweasel

1

Bạn có thể so sánh chuỗi với các chức năng dưới đây.

NSString *first = @"abc"; 
NSString *second = @"abc"; 
NSString *third = [[NSString alloc] initWithString:@"abc"]; 
NSLog(@"%d", (second == third)) 
NSLog(@"%d", (first == second)); 
NSLog(@"%d", [first isEqualToString:second]); 
NSLog(@"%d", [first isEqualToString:third]); 

Output will be :- 
    0 
    1 
    1 
    1