2010-12-12 6 views
1

Ich versuche einen Treffer auf meine if-Anweisung zu bekommen. Ich hole QDIFF (Integer32) aus der Core Data db und alles funktioniert außer bekommen ein Hit auf den if-Anweisungen:kein Treffer auf if-Anweisung

NSString *diff; 

NSArray *fetchedObjects = [qContext executeFetchRequest:fetchRequest error:&error]; 
for (NSManagedObject *info in fetchedObjects) { 
    NSLog(@"idQ: %@", [info valueForKey:@"idQ"]); 
    NSLog(@"qDiff: %@", [info valueForKey:@"qDiff"]); //<<<<<<<<<Print correct number 

    diff = [info valueForKey:@"qDiff"]; 
    NSLog(@"diff: %@", diff);  //<<<<<<<<<Print correct number 

    if ([diff isEqual:@"1"]) NSLog(@"EASY"); 

    //if ([diff isEqualToString: @"2"]) NSLog(@"MEDIUM"); 
    //if ([[info valueForKey:@"qDiff"] isEqualToString: @"3"]) NSLog(@"HARD"); //<<<<<<tried this first 


    NSLog(@"question: %@", [info valueForKey:@"question"]); 
}   
[fetchRequest release];  

Ich habe verschiedene versucht If-Anweisungen, aber es löst nicht (drucken Sie die NSLog).

Wer kann mir einen Hinweis geben?

========= UPDATE ==========

ich geändert:

if ([diff isEqualToString:@"1"]) NSLog(@"EASY"); 

Und bekam die folgende:

2010-12-12 15: 39: 49,321 XX_v2 [2950: 207] idQ: 0
2010-12-12 15: 39: 49,321 XX_v2 [2950: 207] QDIFF: 1
2010-12-12 15 : 39: 49.3 22 XX_v2 [2950: 207] diff: 1
2010-12-12 15: 39: 49.322 XX_v2 [2950: 207] - [_ PFCachedNumber isEqualToString:]: nicht erkannter Selektor an Instanz 0xa0f9008 gesendet
2010-12-12 15: 39: 49,324 XX_v2 [2950: 207] * app Beenden aufgrund abgefangene Ausnahme 'NSInvalidArgumentException', Grund: '- [_ PFCachedNumber isEqualToString]: unerkannter Selektor gesendet Instanz 0xa0f9008'

==== ====== UPDATE # 2 =======

Haben Sie versucht:

if ([diff isEqual:@"1"]) NSLog(@"EASY"); 

kein Unterschied in der Leistung:

2010-12-12 15: 55: 57,381 XX_v2 [3151: 207] idQ: 0
2010-12-12 15: 55: 57,382 XX_v2 [ 3151: 207] qDiff: 1
2010-12-12 15: 55: 57,382 XX_v2 [3151: 207] diff: 1
2010-12-12 15: 55: 57.382 XX_v2 [3151: 207] frage: Tun Sie Willst du ein neues?

jedoch im Debugger i gefunden:

'diff' "Variable nicht CFString"

======== UPDATE # 3 === =====

Der obige Code wurde aktualisiert, um die Definition von 'diff' anzuzeigen.

======== UPDATE # 4 ========

ich endlich das Problem mit dieser Aussage lösen hat: sind

if ([[info valueForKey:@"qDiff"] intValue] == 1) NSLog(@"EASY"); 
+0

Wo erklären Sie 'diff'? –

Antwort

3

Sie qDiff Behandlung als NSString, während Core Data es als Integer32 speichert und es als NSNumber darstellt. Versuchen Sie folgendes:

if ([diff isEqualToNumber:[NSNumber numberWithInt:1]]) NSLog(@"EASY"); 

Oder diese:

if ([diff intValue] == 1) NSLog(@"EASY"); 
+0

danke, hat eine Lösung gefunden – PeterK

2

Sie sagte qDiffinteger32 im Datenmodell ist. Dann ist die Klasse NSNumber im Objective-C-Code, nicht NSString.

Sie sollten wissen, dass in Objective-C, String-Objekte, Nummernobjekte und Nichtobjektnummern nicht automatisch konvertiert werden. Und == funktioniert nicht magisch für alle Arten und Klassen.

So müssen Sie - explizit die entsprechenden Klassen verwenden, und dann - wandeln sie ausdrücklich, - und vergleichen sie mit den entsprechenden Möglichkeiten.

So verwenden

NSNumber* diff = [info valueForKey:@"qDiff"]; 

und führen entweder

if([diff isEqualTo:[NSNumber numberWithInteger:3]]){ ... } 

oder

if([diff intValue] == 3){ ... }