没有命中if语句

时间:2010-12-12 14:26:31

标签: iphone objective-c core-data if-statement

我试图在我的if语句中受到打击。我从Core Data数据库中获取qDiff(integer32),除了命中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]差异:1
  2010-12-12 15:55:57.382 XX_v2 [3151:207]问题:你想要一个新的吗?

但是,在调试器中我找到了:

  

'diff'“变量不是CFString”

======更新#3 ======

更新了上面的代码,以显示'diff'的定义。

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

我最终用这句话解决了问题:

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

2 个答案:

答案 0 :(得分:3)

您将qDiff视为NSString,而Core Data将其保存为整数32并将其公开为NSNumber。试试这个:

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

或者这个:

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

答案 1 :(得分:2)

您在数据模型中说qDiffinteger32。然后,该类在Objective-C代码中为NSNumber,而不是NSString

您应该明白,在Objective-C中,字符串对象,数字对象和非对象编号不会自动转换。并且==对所有类型和类都没有神奇的作用。

所以,你需要 - 明确地使用适当的类,然后 - 明确地转换它们, - 并以适当的方式对它们进行比较。

所以,使用

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

并执行

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

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