我有以下代码:

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:]:数组参数不是NSArray 2011-12-11 21:08:55.123 appName [15671:f803] *由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* -[NSMutableArray addObjectsFromArray:]:数组参数不是NSArray'

===============>>#1 票数:3

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

===============>>#2 票数: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];

===============>>#3 票数:1

NSMutableArray的addObjectsFromArray希望您传递另一个数组,但是您传递的是单个对象(索引为“ i”的对象)

您可以尝试切换

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

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

这将消除您所看到的错误,但是您很可能会遇到另一个问题,因为您正在随行地从nmaSpread中删除对象,结果,数组后面的项的索引被移动了。 您可能应该改变逻辑以解决该问题。

  ask by Jake.Hoskins translate from so

未解决问题?本站智能推荐: