【问题标题】:no hit on if-statement没有命中 if 语句
【发布时间】:2010-12-12 14:26:31
【问题描述】:

我正试图对我的 if 语句产生影响。我从 Core Data db 中获取 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)。

谁能给我一个提示?

=========更新==========

我改成:

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");

【问题讨论】:

  • 你在哪里声明diff

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


【解决方案1】:

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

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

或者这个:

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

【讨论】:

    【解决方案2】:

    您说qDiff 在数据模型中是integer32。那么,Objective-C 代码中的类是NSNumber,而不是NSString

    您应该了解,在 Objective-C 中,字符串对象、数字对象和非对象数字不会自动转换。而== 并不是对所有类型和类都有效。

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

    所以,使用

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

    并执行任一操作

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 2016-05-27
      相关资源
      最近更新 更多