2012-05-03 162 views
23

我使用此代码来比较两个NSNumber对象,但它从未通过if条件。比较两个NSNumber对象

listItems = [appDelegate.productStatus componentsSeparatedByString:@","]; 


for (int i=0;i<[appDelegate.productArray count]; i++) 
{ 

    for (int j=0; j<[listItems count]; j++) 
    { 
     number=[NSNumber numberWithInt:[[listItems objectAtIndex:j] intValue]]; 
     NSLog(@"number %@",number); 
     productObject=[appDelegate.productArray objectAtIndex:i];   
     NSLog(@"%@,%@",productObject.pid,number); 
     if (productObject.pid == number) 
     { 
      NSLog(@"BUY it!!!"); 
      [purchasArray addObject:productObject]; 
     } 

    } 
} 

出什么问题了?

+1

尝试isEqual即时==。 – vishiphone

回答

44

我sugestion是比较它作为

if([productObject.pid intValue] == [number intValue]) 
{ 
NSLog(@"BUY it!!!"); 
     [purchasArray addObject:productObject]; 
} 

欢呼声。

我会避免对象比较

+1

正确,但[number intValue]不是必需的,因为数字是从上面几行的int构建的。所以它可能是如果([productObject.pid intValue] == [[listItems objectAtIndex:j] intValue]) –

+0

谢谢。它的工作 – USK

+1

萨阿德:你应该编辑/添加评论给我的答案,而不是复制它 – Nit

13

尝试比较方法而不是'=='。

if([1stNum compare:secNum] == NSOrderedSame) 
    { 
     // do something 
    } 

告诉我,如果它现在有帮助!

+0

它出现错误: - [NSCFString isEqualToNumber:]:无法识别的选择发送到实例0x753e5e0' – USK

+0

好吧,现在检查我编辑的代码,并告诉我会发生什么! – Deviator

27

更改下面的代码..

if ([productObject.pid isEqualToNumber number]) 
    { 
     NSLog(@"BUY it!!!"); 
     [purchasArray addObject:productObject]; 
    } 

希望,这将帮助你..

+1

这是最好的答案。 – GoldenJoe

1

使用这样的东西我这将有助于您

NSNumber *n=[[NSNumber alloc]init]; 
if([n isEqualToNumber:somenumber]) 
{ 
} 
+1

它显示这个错误 - [NSCFString isEqualToNumber:]:无法识别的选择发送到实例0x753e5e0' – USK

+0

好吧那么你确定你的双方是数字? – vishiphone

+0

因为我不知道你的productObject.pid.for比较两者应该是数字,所以检查。 – vishiphone