Ios 目标C中的比较-内隐转换';int';至';id';不允许使用ARC

Ios 目标C中的比较-内隐转换';int';至';id';不允许使用ARC,ios,iphone,objective-c,casting,type-conversion,Ios,Iphone,Objective C,Casting,Type Conversion,在标记为“错误线路”的线路上出现错误“不允许使用圆弧将'int'隐式转换为'id'。我想这与我在数组中检查一个整数有关,它包含对象而不是整数 #import "RandomGenerator.h" @implementation RandomGenerator NSMutableArray *drawnNumbers; -(int) randomNumber:(int)upperNumber { return arc4random_uniform(upperNumber); }

在标记为“错误线路”的线路上出现错误“不允许使用圆弧将'int'隐式转换为'id'。我想这与我在数组中检查一个整数有关,它包含对象而不是整数

#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
#导入“RandomGenerator.h”
@随机发生器的实现
NSMutableArray*绘图编号;
-(int)randomNumber:(int)upperNumber{
返回arc4random_统一(大写数字);
}
-(NSMutableArray*)乐透号码:(int)带最大绘图号码:(int)和最高号码{

对于(int i=1;i您正在使用一个
int
,其中需要一个对象(大概是
NSNumber

if ([drawnNumbers containsObject:@( drawnNumber )])

NSArray只能包含objective-c对象。因此,实际上方法包含object:需要的是对象,而不是int或任何其他基元类型

如果要在NSArray中存储数字,应将其打包到NSNumber对象中

NSNumber *someNumber = [NSNumber numberWithInt:3];
在您的情况下,如果我们假设DrawnNumber已经是一个NSNumber数组,您应该将randomNumber:生成更改为:

-(NSNumber*) randomNumber:(int)upperNumber {
    return [NSNumber numberWithInt:arc4random_uniform(upperNumber)];
}
然后,在使用lotteryNumbers方法时,您应该:

NSNumber *drawnNumber = [self randomNumber:andHighestNumber];
另一个注意事项是您为lotteryNumbers定义的方法。您使用了一个非常奇怪的名称,我认为您误解了objective-c中的方法命名工作原理。您可能在寻找更类似于:

-(NSMutableArray*) lotteryNumbersWithMaximumDrawnNumbers:(int)maximumDrawnNumbers andHighestNumber:(int)highestNumber;
后期编辑:

Objective-C现在提供了一种更简洁的语法来创建NSNumber。您可以像这样做:

NSNumber *someNumber = @(3);
您的方法可以重写为:

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

谢谢!方法命名很好,有点错误!