2011-04-27 164 views
0

当我做了以下我的应用程序崩溃,我得到一个错误,每当我运行仿真(终止扔“NSException”的实例之后调用):iPhone应用程序崩溃

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

OK写问题本人经发现错误是“0超出了空数组的范围”。

+0

您可以发布完整的循环代码,也是异常的打印输出被提升? – Jamie 2011-04-27 07:51:16

+0

发布一些更多的代码.. – ajay 2011-04-27 07:52:52

+0

发布一些更多的代码,显示类的初始化以及它的使用和释放方式。什么是例外?机会很好,你试图替换的对象并不像你想象的那样存在。 – wadesworld 2011-04-27 07:53:16

回答

2

你真的真的需要发布异常类型和你的代码给我们一个合理的机会来解决你的问题。但是,无论如何,我都会接受一下。

我的猜测是你的代码看起来是这样的:

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"]; 
+0

是的你是对的,但你可以告诉我应该在哪里使用addObject?应该是当我初始化数组?只是举一个例子如何使用因为我真的没有那么多的Objective-C数组知识 – Zee 2011-04-27 08:07:16

+0

我其实已经想了一会儿,但不知道如何用任何随机对象填充它 – Zee 2011-04-27 08:09:25

+0

谢谢,但还有一件事情告诉我一个我应该怎么做的例子? – Zee 2011-04-27 08:20:11

1

如果您使用replaceObjectAtIndex方法与NSArray数组类型的对象,可能会收到异常(崩溃)。

用于管理对象的可修改阵列使用NSMutableArray

虽然replaceObjectAtIndex还可以提出以下例外为对象指数

指数:发起一个NSRangeException如果索引超出阵列的端部。

对象:提出了一个NSInvalidArgumentException如果传递的对象是零。

1

好阵,这里是一个猜测(我不能没有更多的信息做的更好) :

您无法更改正在迭代的对象。

(坏)例:

for (NSObject *obj in Array1){ 
    [Array1 replaceObjectAtIndex:i withObject: [NSString stringWithFormat:@" Trip %i",i+1]] 
}