当我执行以下操作时,无论何时运行模拟,我的应用程序崩溃并且出现错误(在抛出'NSException'实例后调用终止):
for (...)
[Array1 replaceObjectAtIndex:i withObject: [NSString stringWithFormat:@" Trip %i",i+1]]
写完问题后确定我发现错误是“0超出空数组的界限”。
答案 0 :(得分:2)
您真的非常需要发布异常类型和代码,以便我们有合理的机会解决您的问题。不管怎么说,无论如何我都要接受它。
我的猜测是你的代码看起来像这样:
Array1 = [[NSMutableArray alloc] initWithCapacity: someNumber];
for (i = 0 ; i < someNumber ; ++i)
{
[Array1 replaceObjectAtIndex:i withObject: [NSString stringWithFormat:@" Trip %i",i+1]];
}
即使您使用-initWithCapacity:
,所有数组也会以0个对象开头。该方法仅向运行时提供数据将在某个时刻增长到指定大小的提示。您需要使用-addObject:
。
修改强>
是的,从您的编辑,我确定我是对的。该数组已经开始为空,您正在尝试替换尚未存在的索引0处的对象。
上述代码应更改如下:
array1 = [[NSMutableArray alloc] initWithCapacity: someNumber]; // fixed naming convention too :-)
for (i = 0 ; i < someNumber ; ++i)
{
[array1 addObject: [NSString stringWithFormat:@" Trip %i",i+1]];
}
-addObject:
将新对象添加到数组的末尾。
如果你想要一个看起来更像C或Java数组的东西,你可以用NSNull
个对象预填充数组
array1 = [[NSMutableArray alloc] initWithCapacity: 6]; // fixed naming convention too :-)
for (i = 0 ; i < 6 ; ++i)
{
[array1 addObject: [NSNull null]];
}
// Now the following will work
[array1 replaceObjectAtIndex: 4 withObject: @"foo"];
答案 1 :(得分:1)
如果您对replaceObjectAtIndex
数组类型对象使用NSArray
方法,则可能会出现异常(崩溃)。
使用NSMutableArray
来管理可修改的对象数组。
虽然也可以针对对象和索引
提出以下例外replaceObjectAtIndex
索引:如果索引超出数组末尾,则引发NSRangeException
。
对象:如果您传递的对象为零,则引发NSInvalidArgumentException
。
答案 2 :(得分:1)
好的,这是猜测(如果没有更多信息,我无法做得更好):
您无法更改正在迭代的对象。
(差)示例:
for (NSObject *obj in Array1){
[Array1 replaceObjectAtIndex:i withObject: [NSString stringWithFormat:@" Trip %i",i+1]]
}