2011-10-01 75 views
4

我有此代碼將一行添加到表格視圖中我的應用程序的根視圖控制器:獲得「索引0超出界限爲空數組」非空數組錯誤

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 

NSArray *myArray = [NSArray arrayWithObject:indexPath]; 

NSLog(@"count:%d", [myArray count]); 

[self.tableView insertRowsAtIndexPaths:myArray withRowAnimation:UITableViewRowAnimationFade]; 

[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 

當它是與模擬器中運行,我得到這樣的輸出:

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

這是發生在[self.tableView insertRowsAtIndexPaths:myArray withRowAnimation:UITableViewRowAnimationFade];線,但NSLog聲明顯示,被稱爲myArrayNSArray不是空的。我錯過了什麼嗎?有沒有人曾經遇到過這個?

回答

0

調用insertRowsAtIndexPaths會觸發您要調用的UITableViewController委託/數據源方法。這是爲了讓UITableView可以獲取新行的數據。您需要將數據插入到數據模型中,並確保numberOfRowsInSection正在返回新增值。

NSRangeException錯誤指的是您使用的任何NSMutableArray存儲數據的錶行而不是索引路徑的數組。

+0

在所有委託/數據源方法上放置斷點,然後遍歷insertRowsAtIndexPaths行。看看你最終在哪裏,並試圖精確地縮小拋出異常的位置。 –

1

在日誌語句之前的行中,您正在創建一個僅在此方法範圍內有效的新數組。您用於表視圖的數據源方法的數組是不同的,因此該數組中的對象數量根本無關緊要,即使它具有(如我所懷疑的)相同的名稱。

+0

是的。我明白你的意思,多虧你們都指出了這一點。不過,我仍然有同樣的問題。我爲表格行存儲數據的NSMutableArray是一個名爲eventsArray的iVar。當我將NSLog語句更改爲'NSLog(@「Count:%d」,[self.eventsArray count]);'我得到14作爲計數。仍然不是一個空陣列。有任何想法嗎? - 謝謝您的幫助。對此,我真的非常感激。 – axl

相關問題