2010-04-07 22 views
57

Ich habe momentan 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, dies mit einer anderen Zeichenfolge zu vergleichen, bekomme ich seltsame Ergebnisse.Stringvergleich in Objective-C

Warum würde das nicht feuern? Sicherlich sind die zwei Saiten eine Übereinstimmung?

NSString *myString = @"hello world"; 

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

Diese Frage ist jetzt meistens nutzlos, weil der Screenshot verschwunden ist. Deshalb sollte Code in Fragen kopiert werden. –

+0

Der Screenshot war der Fehler, den ich denke, aber die Antwort wurde vor 2 Jahren gegeben! –

+1

Aber kein zukünftiger Leser kann den Fehler oder den Code sehen, den Sie verwenden, um zu wissen, ob es derselbe ist wie sie, was bedeutet, dass diese Frage niemand anderem helfen kann. –

Antwort

147

die -isEqualToString: Methode können den Wert von zwei Zeichenfolgen vergleichen. Mit dem Operator C == werden einfach die Adressen der Objekte verglichen.

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

AH! Ich danke dir sehr. Fühlen Sie sich wie ein Idiot! –

+2

Meine Vermutung ist, dass Sie in ObjectiveC++ eine Operatorüberladung erstellen können, um Ihnen die syntaktisch-zuckerhaltige Fähigkeit zu geben ==, aber kein vernünftiger C-Programmierer würde dies tun, weil == nur für Identitätsprüfungen in Ziel-C-Objekten verwendet wird. –

41

Je nach Bedarf können Sie die Groß-/Kleinschreibung zwischen Groß- und Kleinschreibung unterscheiden. Case-empfindlich ist wie folgt aus:

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

Case-unempfindlich ist wie folgt:

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

Ich denke, es sollte sein: ([Kategorie vergleichen: @ "Einige String" -Optionen: NSCaseInsensitiveSearch] == NSOrderedSame) – JaakL

+7

Seien Sie vorsichtig mit der "vergleichen" -Funktion, denn wenn die Zeichenfolge (in diesem Fall "Kategorie") ist Null, compare liefert immer NSOrderedSame. – nh32rg

+0

Das ist ein toller Punkt @ nh32rg !! +1 dafür! Hat das isEqualToString das gleiche Problem? – badweasel

1

Sie können String mit 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 
Verwandte Themen