не ударил по if-заявлению - PullRequest
       20

не ударил по if-заявлению

1 голос
/ 12 декабря 2010

Я пытаюсь получить удар по моему утверждению if. Я выбираю qDiff (integer32) из ​​базы данных Core Data, и все работает, кроме попадания в оператор if:

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

Я пробовал разные операторы If, но он не срабатывает (выведите NSLog).

Кто-нибудь, кто может дать мне подсказку?

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

Я изменил на:

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

И получил следующее:

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.322 XX_v2 [2950: 207] дифференциал: 1
2010-12-12 15: 39: 49.322 XX_v2 [2950: 207] - [_ PFCachedNumber isEqualToString:]: нераспознанный селектор, отправленный экземпляру 0xa0f9008
2010-12-12 15: 39: 49.324 XX_v2 [2950: 207] * Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [_ PFCachedNumber isEqualToString:]: нераспознанный селектор, отправленный экземпляру 0xa0f9008'

========== ОБНОВЛЕНИЕ № 2 =======

Пробовал:

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

нет разницы в выходе:

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] Вопрос: Хотите новый?

Однако в отладчике я нашел:

'diff' "Переменная не CFString"

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

Обновлен код выше, чтобы показать определение diff.

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

Я наконец-то решил проблему с помощью этого утверждения:

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

Ответы [ 2 ]

3 голосов
/ 12 декабря 2010

Вы рассматриваете qDiff как NSString, в то время как Core Data сохраняет его как целое число 32 и выставляет его как NSNumber. Попробуйте это:

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

Или это:

if ([diff intValue] == 1) NSLog(@"EASY");
2 голосов
/ 12 декабря 2010

Вы сказали, что qDiff - это integer32 в модели данных. Тогда класс будет NSNumber в коде Objective-C, а не NSString.

Вы должны понимать, что в Objective-C строковые объекты, числовые объекты и числа не-объектов не преобразуются автоматически . И == не работает магически для всех типов и классов.

Итак, вам нужно - использовать соответствующие классы явно, а затем - конвертировать их явно, - и сравните их с подходящими способами.

Итак, используйте

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

и выполните либо

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

или

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