2011-12-11 161 views
2

添加对象,我有以下代码:从另一个阵列

for (int i = 1; i <= [nmaSpread count];) 
{ 
    [nmaUserName addObjectsFromArray:[nmaSpread objectAtIndex:i]]; 
    [nmaSpread removeObjectAtIndex:i]; 
    i += 2; 
} 

我已经声明的所有变量为全局,nmaUserName和nmaSpread都是NSMutableArrays,并在viewDidLoad中已被分配。

我想将所有来自nmaSpread的奇怪对象存储到nmaUsername中,然后在nmaSpread中删除活动对象。

但是它一直与此错误崩溃:

[NSMutableArray addObjectsFromArray:]: array argument is not an NSArray 2011-12-11 21:08:55.123 appName[15671:f803] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[NSMutableArray addObjectsFromArray:]: array argument is not an NSArray'

回答

3

nmaSpread本身就是一个NSMutableArray,但它看起来像它包含的对象。当您执行[nmaSpread objectAtIndex:i]时,将从nmaSpread返回一个对象。该对象不是数组,因此要添加它,您只需使用addObject:而不是addObjectsFromArray:

+0

啊我看到非常感谢查克!解决问题。谢谢。 –

1

的NSMutableArray的addObjectsFromArray希望你通过另一个数组,但你传递一个对象(一个索引 'I')

你可以尝试切换

[nmaUserName addObjectsFromArray:[nmaSpread objectAtIndex:i]]; 

[nmaUserName addObject:[nmaSpread objectAtIndex:i]]; 

这将消除你看到的错误,但是你很可能会遇到另一个问题,因为你正在从nmaSpread中删除对象,因此,数组中稍后的项目索引被移位。你应该改变你的逻辑来解决这个问题。

2

你的代码有几个问题。

首先,您已经错过了解-addObjectsFromArray:的功能。你想要的实际方法只是addObject:

其次,在循环中修改数组是很危险的。苹果公司的官方说法是:“这可能在某些情况下有效,但不要这样做,因为它可能会在将来的任何时候停止工作”。您需要等到循环完数组后才能删除它们。你当前的代码肯定是做错了。

你可以坐下来与笔/纸和制定出数学让这一切完好,但它更容易和更安全地只是这样做:

NSMutableIndexSet *indexesToRemove = [NSMutableIndexSet indexSet]; 

for (int i = 1; i <= [nmaSpread count];) 
{ 
    [nmaUserName addObject:[nmaSpread objectAtIndex:i]]; 
    [indexesToRemove addIndex:i]; 
    i += 2; 
} 

[mmaSpread removeObjectsAtIndexes:indexesToRemove]; 
+0

好的谢谢:)我也犯了一个错误,它应该是我+ = 1,使奇数。 –