當我做了以下我的應用程序崩潰,我得到一個錯誤,每當我運行仿真(終止扔「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