iPhone应用程序崩溃

时间:2011-04-27 07:48:15

标签: iphone objective-c ios4

当我执行以下操作时,无论何时运行模拟,我的应用程序崩溃并且出现错误(在抛出'NSException'实例后调用终止):

for (...)
    [Array1 replaceObjectAtIndex:i withObject: [NSString stringWithFormat:@" Trip %i",i+1]]

写完问题后确定我发现错误是“0超出空数组的界限”。

3 个答案:

答案 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]]
}