2012-05-03 161 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