2010-12-12 39 views
1

J'essaie d'obtenir un hit sur mon if-statement. Je vais chercher Qdiff (Integer32) à partir du db Core Data et tout fonctionne sauf obtenir un coup sur les déclarations if-:aucun succès if-statement

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];  

J'ai essayé différentes instructions if, mais il ne déclenche pas (imprimer le NSLog).

Toute personne qui peut me donner un indice?

MISE À JOUR ========= ==========

J'ai changé à:

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

et a obtenu les éléments suivants:

12/12/2010 15: 39: 49,321 XX_v2 [2950: 207] IDQ: 0
12/12/2010 15: 39: 49,321 XX_v2 [2950: 207] Qdiff: 1
12/12/2010 15 : 39: 49.3 22 XX_v2 [2950: 207] diff: 1
2010-12-12 15: 39: 49.322 XX_v2 [2950: 207] - [_ PFCachedNumber isEqualToString:]: sélecteur non reconnu envoyé à l'instance 0xa0f9008
2010-12-12 15: 39: 49,324 XX_v2 [2950: 207] * en raison de l'application Mettre fin exception uncaught 'NSInvalidArgumentException', raison: '- [_ PFCachedNumber isEqualToString:]: sélecteur non reconnu envoyé à l'instance 0xa0f9008'

==== ====== MISE À JOUR # 2 =======

a bien essayé:

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

pas de différence de sortie:

2010-12-12 15: 55: 57,381 XX_v2 [3151: 207] IDQ: 0
12/12/2010 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] question: Avez-vous Voulez-vous un nouveau?

Cependant, dans le débogueur j'ai trouvé:

'diff' "Variable pas CFString"

MISE A JOUR ======== # 3 === =====

Mise à jour le code ci-dessus pour afficher la définition de 'diff'.

MISE A JOUR ======== # 4 ========

Je ne enfin résoudre le problème avec cette déclaration:

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

Où êtes-vous déclarez 'diff'? –

Répondre

3

Vous traitez qDiff en tant que NSString tandis que Core Data l'enregistre sous la forme d'un entier32 et l'expose en tant que NSNumber. Essayez ceci:

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

Ou ceci:

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

merci, a trouvé une solution – PeterK

2

Vous avez dit qDiff est integer32 dans le modèle de données. Ensuite, la classe est NSNumber dans le code Objective-C, et non NSString.

Vous devez comprendre que dans Objective-C, les objets chaîne, les objets nombre et les numéros autres que les objets sont non convertis automatiquement. Et == ne fonctionne pas comme par magie pour tous les types et les classes.

Donc, vous devez - utiliser les classes appropriées explicitement, puis - les convertir explicitement, - et de les comparer avec des moyens appropriés.

Alors, utilisez

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

et effectuer soit

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

ou

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