2012-03-27 3 views
0

Mögliche Duplizieren:
Why is my comparing if statement not working?String Vergleich in if() folgt falschen Zweig

ich, ob eine bestimmte Einstellung zu überprüfen bin versucht, um zu sehen, wurde auf "Ein" oder „Aus ". Hier ist mein Code:

BOOL switchOn; 
if ([self loadSettings:@"useLocation"] == @"On"){ 
    switchOn = YES; 
    NSLog(@"Use Location (Yes): %@",[self loadSettings:@"useLocation"]); 
}else{ 
    switchOn = NO; 
    NSLog(@"Use Location (No): %@",[self loadSettings:@"useLocation"]); 
} 
NSLog(@"Switch On: %@",switchOn ? @"YES":@"NO"); 

Gedruckt in das Protokoll ist:

Verwendeten Ort (No): Auf

Switch On: NEIN

Sie können sehen, dass für Wenn "Standort verwenden (Nein)" angezeigt wird, sollte die Funktion nicht "Ein" zurückgegeben haben. Aber es gab "On" zurück. Vergleiche ich sie nicht richtig?

Hier ist mein Code die Standardeinstellungen für das Laden:

- (NSString *)loadSettings: (NSString *)key{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults synchronize]; // this method is optional 

    // Get the results out 
    NSString *results = [defaults stringForKey:key]; 

    return results; 
} 

Ich bin ein NSString Rückkehr, also bin ich wirklich nicht sicher, was das Problem ist. Ich bekomme überhaupt keine Fehler in der Build-Umgebung vor oder nach dem Kompilieren.

+0

möglich Duplikat: [Wie kann ich Strings in Ziel c vergleichen] (http://stackoverflow.com/q/1302985/1048330) – tenorsax

+0

Ziemlich viel ist ein Duplikat , aber meine Suche hat das nicht gebracht. – James

Antwort

4

Sie haben isEqualToString:

Ex verwenden:

if ([myString isEqualToString:@"YES"]) { 
    //do stuff 
} 

Die Art und Weise Sie es tun tatsächlich selbst die Zeiger auf die Objekte zu vergleichen.

+0

Hat super funktioniert. So seltsam. Muss ich das für einen String oder nur für Strings tun, die von Funktionen zurückgegeben werden? Ich werde dies als die Antwort markieren, sobald es mich lässt. – James

+0

Beliebige Zeichenfolge. Gerade Konstanten: '[@" TestString "isEqualToString: @" TestString "]' gibt 'YES' zurück – rosslebeau

+0

Ok, danke. Ich werde mich daran erinnern. – James

3

Verwendung:

if([[self loadSettings:@"useLocation"] isEqualToString: @"On"] { 
    switchOn = YES; 
} 

As documented here

+0

Danke für die Antwort. Du wurdest nur ein wenig geschlagen, aber das ist die Antwort, also nimm immer noch eine Stimme. – James

5

== Zeiger vergleicht, so dass selbst wenn zwei NSStrings den gleichen Inhalt haben sie nicht die gleiche Adresse im Speicher haben, in welchem ​​Fall == falsch wäre.

Verwenden `isEqualToString‘ statt:

if ([[self loadSettings:@"useLocation"] isEqualToString:@"On"]){ 
... 
+0

Danke für die Antwort. Du wurdest nur ein wenig geschlagen, aber das ist die Antwort, also nimm immer noch eine Stimme. – James