没有命中if语句 [英] no hit on if-statement

查看:132
本文介绍了没有命中if语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想获得一个命中我的if语句。我从Core Data数据库获取qDiff(整数32),一切正常,除非得到一个命中的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]); //<<<<<<<打印正确的数字

diff = [info valueForKey:@qDiff];
NSLog(@diff:%@,diff);如果([diff isEqual:@1])NSLog(@EASY),则打印正确的数字

;

// if([diff isEqualToString:@2])NSLog(@MEDIUM);
// if([[info valueForKey:@qDiff] isEqualToString:@3])NSLog(@HARD); //<<<<<<<试过这个第一个


NSLog(@question:%@,[info valueForKey:@question]);
}
[fetchRequest release];

我一直在尝试不同的if语句,但它不触发(打印NSLog)。

任何人可以给我一个提示?



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



我改为:

  if([diff isEqualToString:@1])NSLog 简单); 

得到以下结果:


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] diff: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',reason:' - [_ PFCachedNumber isEqualToString:]:unrecognized selector sent to instance 0xa0f9008'


=== ======= UPDATE#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); 


解决方案

您正在处理 qDiff 作为NSString,而Core Data将其保存为整数32,并将其显示为NSNumber。尝试这样:

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

或:

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


I am trying to get a hit on my if-statement. I fetch qDiff (integer32) from the Core Data db and everything works except get a hit on the if-statements:

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

I have been trying different If-statements but it does not trigger (print the NSLog).

Anyone that can give me a hint?

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

I changed to:

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

And got the following:

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] diff: 1
2010-12-12 15:39:49.322 XX_v2[2950:207] -[_PFCachedNumber isEqualToString:]: unrecognized selector sent to instance 0xa0f9008
2010-12-12 15:39:49.324 XX_v2[2950:207] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_PFCachedNumber isEqualToString:]: unrecognized selector sent to instance 0xa0f9008'

==========UPDATE #2=======

Did try:

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

no difference in output:

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] question: Do you want a new?

However, in the debugger i found:

'diff' "Variable not a CFString"

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

Updated the code above to show definition of 'diff'.

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

I did finally solve the problem with this statement:

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

解决方案

You are treating qDiff as an NSString while Core Data saves it as an integer32 and exposes it as an NSNumber. Try this:

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

Or this:

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

这篇关于没有命中if语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆