2010-04-07 14 views
57

Mam skonfigurowany serwer internetowy, który komunikuję za pośrednictwem protokołu SOAP z moją aplikacją na iPhone'a. Zwracam ciąg zawierający GUID i kiedy próbuję porównać to z innym ciągiem, otrzymuję dziwne wyniki.Porównanie łańcuchów w Objective-C

Dlaczego to się nie rozpali? Z pewnością dwa łańcuchy są dopasowane?

NSString *myString = @"hello world"; 

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

To pytanie jest teraz bezużyteczne, ponieważ zrzut ekranu zniknął. Właśnie dlatego kod powinien być wklejony na pytania. –

+0

Zrzut ekranu był błędem, ale odpowiedź została udzielona 2 lata temu! –

+1

Ale żaden przyszły czytelnik nie może zobaczyć błędu lub kodu, którego używasz, aby wiedzieć, czy jest taki sam jak jego, co oznacza, że ​​to pytanie nie może pomóc nikomu innemu. –

Odpowiedz

147

Użyj metody -isEqualToString:, aby porównać wartości dwóch ciągów. Użycie operatora C == spowoduje po prostu porównanie adresów obiektów.

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

AH! Dziękuję bardzo. Poczuj się trochę głupcem! –

+2

Domyślam się, że w ObjectiveC++ można stworzyć przeciążenie operatora, aby dać syntaktycznie słodką umiejętność użycia ==, ale żaden rozsądny cel nie zrobiłby tego programista C, ponieważ == służy tylko do sprawdzania tożsamości w obiektach C obiektu. –

41

W zależności od potrzeb można używać rozróżniania wielkości liter i wielkości liter. Case-wrażliwy jest tak:

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

Case-niewrażliwy jest tak:

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

Myślę, że powinno być: ([porównanie kategorii: @ "Niektóre ciągi" opcje: NSCaseInsensitiveSearch] == NSOrderedSame) – JaakL

+7

Uważaj z funkcją "porównaj", ponieważ jeśli ciąg znaków (w tym przypadku "kategoria") jest zerowy, compare zawsze zwróci NSOrderedSame. – nh32rg

+0

To świetny punkt @ nh32rg !! +1 za to! Czy isEqualToString ma ten sam problem? – badweasel

1

można porównać ciąg z funkcji poniżej.

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