2011-04-27 286 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]] 
}