2012-01-08 63 views
1

可能重複:
index 0 beyond bounds for empty array errorALLOC初始化釋放

我在iOS的編程愛好者。編程時我總是遇到同樣的問題。 我認爲我不瞭解內存管理問題。 這是我的實際項目:

h文件:含 一個NSMutableArray的NSString的

NSMutableArray *pictureStrings; 

@property (nonatomic,retain) NSMutableArray *pictureStrings; 
在M文件

@synthesize pictureStrings; 

,並在viewDidLoad方法

pictureStrings = [[NSMutableArray alloc] init]; 

dealloc方法

[pictureStrings release]; 

好的。我有一個異步URL請求它得到的值存儲到pictureStrings

[pictureStrings addObject:aString]; 

當我讀到cellForRowAtIndexPath方法中值像

if (pictureStrings != nil) { 
    cell.textLabel.text = [NSString stringWithFormat:@"%@", [pictureStrings objectAtIndex:indexPath.row]]; 
} 
若干字符串,並在connectionDidFinishLoading委託方法工作

我的應用程序崩潰與消息:

*期限inating應用程序由於未捕獲的異常 'NSRangeException',原因是: '* - [NSMutableArray的objectAtIndex:]:索引0超越界限空陣'

哪裏是我的錯嗎? 請幫幫我!

你的,拉斐爾。 來自奧地利的問候

回答

3

您的崩潰不是內存管理問題。你的崩潰是你正在讀數組的末尾。我們知道pictureStrings在這一點上是非零,因爲如果它是零,那麼objectAtIndex:方法會默默返回nil(因爲消息傳遞nil返回nil [1])。哦,更不用說了,無論如何你都可以撥打objectAtIndex:來撥打if - 但是你可以放心地刪除它,因爲你不需要它。

所以,這裏唯一真正可能發生的事情是,在重新加載表視圖之前,您的[pictureStrings addObject:aString]未被調用。然而,這很奇怪,因爲我認爲你在表視圖的tableView:numberOfRowsInSection:數據源方法中正在執行類似return pictureStrings.count的操作。如果數組中真的有零個元素,那麼表視圖不會要求任何行,並且您不會得到這個崩潰。

我認爲你的問題很可能是你沒有將字符串添加到數組中。您可以通過突出顯示代碼並查看正在發生的事情來進行檢查。

此外,考慮改變你的代碼到單元格的文本設置爲這樣:

cell.textLabel.text = [pictureStrings objectAtIndex:indexPath.row]; 

你說他們已經串何必通過stringWithFormat:電話去?

[1]警告:並不總是返回nil - 請閱讀它瞭解更多信息。

+0

嗨,大家好:這是我的一個愚蠢的錯誤。你是對的。這不是內存管理問題。我的想法是,加載圖片的所有路徑,但僅顯示tableView中的前10個。所以錯誤被創建。 非常感謝! – Raphael 2012-01-10 12:34:23

相關問題