2010-07-07 51 views
0

這裏是代碼,其中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]; 
} 

回答

0

你需要 「拆箱」 int值:

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

的數組存儲對象(這裏的NSNumber),而你想一個普通的int

同樣適用於插入,這就是爲什麼您在添加時調用[NSNumber numberWithInt:...]

編輯:數組中的索引範圍從0 ...(count-1),不知道你的+1是否應該做它應該做的。

+0

他從來沒有真正使用unboxed號碼,所以我沒有理由unbox然後rebox。 – 2010-07-07 06:30:31

+0

是真的,但代碼無論如何沒有什麼意義,所以我認爲它更像是方法調用和警告的代碼示例。 – Eiko 2010-07-07 06:42:16

0

它應該是:

NSNumber *temp = [listArray objectAtIndex:rN]; 

NSMutableArray保存Obj-C對象,這就是爲什麼你必須使用NSNumber numberWithInt:。這意味着當你用objectAtIndex將其拉出時,你會得到一個NSNumber *