【问题标题】:initialization makes integer from pointer without a cast初始化从没有强制转换的指针生成整数
【发布时间】:2010-07-07 06:24:00
【问题描述】:

这里是代码,其中 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];
}

【问题讨论】:

    标签: objective-c iphone


    【解决方案1】:

    您需要将 int 值“拆箱”:

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

    数组存储对象(这里是NSNumber),而您想要一个普通的int

    插入也是如此,这就是为什么您在添加时调用[NSNumber numberWithInt:...]

    编辑:数组中的索引范围为 0 ... (count-1),不确定您的 +1 是否符合要求。

    【讨论】:

    • 他从来没有真正使用过拆箱后的号码,所以我认为没有理由拆箱然后重新装箱。
    • 是的,但是代码无论如何也没有多大意义,所以我认为它更像是方法调用和警告的代码示例。
    【解决方案2】:

    应该是:

    NSNumber *temp = [listArray objectAtIndex:rN];
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      相关资源
      最近更新 更多