初始化从指针生成整数而没有强制转换

时间:2010-07-07 06:24:00

标签: objective-c iphone

这里是代码,其中listArray是NSMutableArray
......

listArray = [[NSMutableArray alloc] initWithCapacity:100];
        for ( int i = 0 ; i < 100 ; i ++ )
            [listArray addObject:[NSNumber numberWithInt:i]];

...

for(int max=99; max >= 0 ; max --)
{
    int rN = (arc4random() % max) + 0;

    //Warning 1: initialization makes integer from pointer without a cast
    int temp = [listArray objectAtIndex:rN];
    [listArray insertObject:[listArray objectAtIndex:max] atIndex:rN];

    //passing argument 1 of 'insertObject:atIndex:' makes pointer from integer without a cast
    [listArray insertObject:temp atIndex:max];
}

2 个答案:

答案 0 :(得分:0)

应该是:

NSNumber *temp = [listArray objectAtIndex:rN];

NSMutableArray包含Obj-C对象,这就是你必须使用NSNumber numberWithInt:的原因。这意味着当您使用objectAtIndex将其拉出时,您会获得NSNumber *

答案 1 :(得分:0)

您需要“取消装箱”int值:

int temp = [[listArray objectAtIndex:rN] intValue];

数组存储对象(此处为NSNumber),而您需要简单的int

同样适用于插入,这就是您在添加时调用[NSNumber numberWithInt:...]的原因。

编辑:数组中的索引范围为0 ...(count-1),不确定+1是否做了它应该做的事情。