2014-02-06 21 views
5

我出現錯誤「隱式轉換'int'到'id'不允許使用ARC」在標有「故障線路」。我想它有一些事情要做,我檢查一個數組中的整數,其中包含對象,而不是整數。在目標C中進行比較 - 隱式轉換'int'到'id'不允許使用ARC

#import "RandomGenerator.h" 

@implementation RandomGenerator 

NSMutableArray *drawnNumbers; 

-(int) randomNumber:(int)upperNumber { 
    return arc4random_uniform(upperNumber); 
} 

-(NSMutableArray*) lotteryNumbers :(int)withMaximumDrawnNumbers :(int)andHighestNumber { 
    for (int i = 1; i <= withMaximumDrawnNumbers; i++) 
    { 
     int drawnNumber = [self randomNumber:andHighestNumber]; 
     if ([drawnNumbers containsObject:drawnNumber]) { //faulty line 
      //foo 
     } 
    } 
    return drawnNumbers; 
} 

@end 

回答

31

NSArrays只能包含objective-c對象。實際上,方法containsObject:正在等待一個對象,而不是一個int或任何其他基元類型。

如果你想存儲一個NSArray內的數字,你應該把它們打包成NSNumber對象。拿起它的lotteryNumbers時

-(NSNumber*) randomNumber:(int)upperNumber { 
    return [NSNumber numberWithInt:arc4random_uniform(upperNumber)]; 
} 

然後:

NSNumber *someNumber = [NSNumber numberWithInt:3]; 

在你的情況,如果我們假設drawnNumbers已經是NSNumbers的數組,你應該改變randomNumber:代方法,您應該:

NSNumber *drawnNumber = [self randomNumber:andHighestNumber]; 

另一個需要注意的是您爲彩票號碼定義的方法。你使用了一個非常奇怪的名字,我認爲你誤解了Objective-C中的方法命名方式。你可能正在尋找更多的東西一樣:

-(NSMutableArray*) lotteryNumbersWithMaximumDrawnNumbers:(int)maximumDrawnNumbers andHighestNumber:(int)highestNumber; 

後期編輯:

的Objective-C現在允許的方式創造NSNumbers更緊湊的語法。你可以不喜歡它:

NSNumber *someNumber = @(3); 

而且你的方法可能會被改寫爲:

-(NSNumber*) randomNumber:(int)upperNumber { 
    return @(arc4random_uniform(upperNumber)); 
} 
+2

謝謝!方法命名很好,有點不對! –

5

您使用的是int一物體(大概NSNumber)的預期。所以在使用前進行轉換:

if ([drawnNumbers containsObject:@(drawnNumber)]) 
相關問題