当我做了以下我的应用程序崩溃,我得到一个错误,每当我运行仿真(终止扔“NSException”的实例之后调用):iPhone应用程序崩溃
for (...)
[Array1 replaceObjectAtIndex:i withObject: [NSString stringWithFormat:@" Trip %i",i+1]]
OK写问题本人经发现错误是“0超出了空数组的范围”。
当我做了以下我的应用程序崩溃,我得到一个错误,每当我运行仿真(终止扔“NSException”的实例之后调用):iPhone应用程序崩溃
for (...)
[Array1 replaceObjectAtIndex:i withObject: [NSString stringWithFormat:@" Trip %i",i+1]]
OK写问题本人经发现错误是“0超出了空数组的范围”。
你真的真的需要发布异常类型和你的代码给我们一个合理的机会来解决你的问题。但是,无论如何,我都会接受一下。
我的猜测是你的代码看起来是这样的:
Array1 = [[NSMutableArray alloc] initWithCapacity: someNumber];
for (i = 0 ; i < someNumber ; ++i)
{
[Array1 replaceObjectAtIndex:i withObject: [NSString stringWithFormat:@" Trip %i",i+1]];
}
所有的数组开始了与他们0对象,即使您使用-initWithCapacity:
。该方法仅向运行时提供了一个提示,即该数组在某个时间点将增长到指定的大小。您需要使用-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"];
如果您使用replaceObjectAtIndex
方法与NSArray
数组类型的对象,可能会收到异常(崩溃)。
用于管理对象的可修改阵列使用NSMutableArray
。
虽然replaceObjectAtIndex
还可以提出以下例外为对象和指数
指数:发起一个NSRangeException
如果索引超出阵列的端部。
对象:提出了一个NSInvalidArgumentException
如果传递的对象是零。
好阵,这里是一个猜测(我不能没有更多的信息做的更好) :
您无法更改正在迭代的对象。
(坏)例:
for (NSObject *obj in Array1){
[Array1 replaceObjectAtIndex:i withObject: [NSString stringWithFormat:@" Trip %i",i+1]]
}
您可以发布完整的循环代码,也是异常的打印输出被提升? – Jamie 2011-04-27 07:51:16
发布一些更多的代码.. – ajay 2011-04-27 07:52:52
发布一些更多的代码,显示类的初始化以及它的使用和释放方式。什么是例外?机会很好,你试图替换的对象并不像你想象的那样存在。 – wadesworld 2011-04-27 07:53:16