Zeichenfolgenvergleich in Objective-C

92

Ich habe derzeit einen Webserver eingerichtet, den ich über SOAP mit meiner iPhone-App kommuniziere. Ich gebe eine Zeichenfolge zurück, die eine GUID enthält, und wenn ich versuche, diese mit einer anderen Zeichenfolge zu vergleichen, erhalte ich einige seltsame Ergebnisse.

Warum sollte das nicht feuern? Sicherlich sind die beiden Saiten ein Match?

NSString *myString = @"hello world";

if(myString == @"hello world")
    return;
ingh.am
quelle
1
Diese Frage ist jetzt größtenteils nutzlos, da der Screenshot verschwunden ist. Aus diesem Grund sollte Code in Fragen eingefügt werden.
Jscs
Der Screenshot war der Fehler, den ich denke, aber die Antwort wurde wie vor 2 Jahren gegeben!
Ingh.am
1
Aber kein zukünftiger Leser kann den Fehler oder den Code sehen, den Sie verwendet haben, um zu wissen, ob er mit dem Fehler identisch ist, was bedeutet, dass diese Frage niemand anderem helfen kann.
Jscs
Ich werde nach dem Bild suchen. Ich verstehe, dass dies wie eine Referenzbasis für andere Fragen ist, aber es jetzt zu schließen ist nur ein bisschen sinnlos.
Ingh.am
2
Warum ist diese Frage geschlossen? Es ist eine absolut gültige Frage!
ibz

Antworten:

212

Verwenden Sie die -isEqualToString:Methode, um den Wert zweier Zeichenfolgen zu vergleichen. Mit dem C- ==Operator werden einfach die Adressen der Objekte verglichen.

if ([category isEqualToString:@"Some String"])
{
    // Do stuff...
}
jlehr
quelle
2
AH! Vielen Dank. Fühlen Sie sich wie ein Idiot!
Ingh.am
3
Ich vermute, dass Sie in ObjectiveC ++ eine Operatorüberladung erstellen könnten, um syntaktisch zuckerhaltige Möglichkeiten zur Verwendung von == zu erhalten, aber kein vernünftiger Ziel-C-Programmierer würde dies tun, da == nur für Identitätsprüfungen in Ziel-C-Objekten verwendet wird.
Warren P
48

Je nachdem, was Sie benötigen, können Sie einen Vergleich verwenden, bei dem zwischen Groß- und Kleinschreibung unterschieden wird. Groß- und Kleinschreibung ist wie folgt:

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

Groß- und Kleinschreibung wird nicht berücksichtigt:

if ([category compare:@"Some String" options:NSCaseInsensitiveSearch] == NSOrderedSame)
{
   // Both strings are equal with respect to their case.
}
mxg
quelle
1
Ich denke, es sollte sein: ([Kategorie vergleichen: @ "Some String" -Optionen: NSCaseInsensitiveSearch] == NSOrderedSame)
JaakL
9
Seien Sie vorsichtig mit der Funktion "Vergleichen", denn wenn die Zeichenfolge (in diesem Fall "Kategorie") Null ist, gibt compare immer NSOrderedSame zurück.
nh32rg
Das ist ein großartiger Punkt @ nh32rg !! +1 dafür! Hat der isEqualToString das gleiche Problem?
Badweasel
5

Sie können die Zeichenfolge mit den folgenden Funktionen vergleichen.

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
Vikram Pote
quelle