我试图在我的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");
答案 0 :(得分:3)
您将qDiff
视为NSString,而Core Data将其保存为整数32并将其公开为NSNumber。试试这个:
if ([diff isEqualToNumber:[NSNumber numberWithInt:1]]) NSLog(@"EASY");
或者这个:
if ([diff intValue] == 1) NSLog(@"EASY");
答案 1 :(得分:2)
您在数据模型中说qDiff
是integer32
。然后,该类在Objective-C代码中为NSNumber
,而不是NSString
。
您应该明白,在Objective-C中,字符串对象,数字对象和非对象编号不会自动转换。并且==
对所有类型和类都没有神奇的作用。
所以,你需要 - 明确地使用适当的类,然后 - 明确地转换它们, - 并以适当的方式对它们进行比较。
所以,使用
NSNumber* diff = [info valueForKey:@"qDiff"];
并执行
if([diff isEqualTo:[NSNumber numberWithInteger:3]]){ ... }
或
if([diff intValue] == 3){ ... }