2010-06-18 43 views
0

爲什麼下面的代碼會引發此錯誤?將UITableView滾動到有效的索引路徑將引發錯誤

if ([self.tableView.dataSource numberOfSectionsInTableView:self.tableView] > 0 && [self.tableView.dataSource tableView:self.tableView numberOfRowsInSection:0] > 1) { 
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]; 
} 

拋出

***終止應用程序由於未捕獲的異常 'NSRangeException',原因: ' - [UITableView的scrollToRowAtIndexPath:atScrollPosition:動畫:]:部分(0)超過界限(0)'。

這是早上很早,但我很難過。

+0

我難倒了。你確定這是對'scrollToRowAtIndexPath:atScrollPosition:animated:'的調用引發錯誤嗎? – 2010-06-18 18:06:36

+0

積極。調試器每次都掛在那條線上。 – DougW 2010-06-18 18:38:59

+0

你在哪裏調用這段代碼?也無關緊要的一面:我不認爲你需要檢查節數是否大於0,因爲即使你沒有明確地使用節,所有的表都至少有一個節,所以這個檢查總是成立的。 – nebs 2010-06-18 19:01:45

回答

2

嘗試在您發佈的行之前撥打[self.tableView reloadData]

我敢打賭,該表之後被渲染的數據源已準備就緒,並調用scrollTo...方法與數據源中的數據呈現表之前...

+0

這可能是正確的,但對我來說這似乎是不可接受的,因爲表格會在視圖加載時重新加載兩次。這聽起來像我真正需要的是一個回調我的委託像「tableDidReload」。當創建視圖時,tableview會自動調用reloadData,所以何時會發生?它似乎應該在viewDidAppear被調用之前發生,但似乎並非如此。 – DougW 2010-06-18 22:49:52

+0

我沒有看到你所有的代碼,但我確信你可能會把你在'reloadData'之後發佈的代碼。我很肯定你在填充數據源之後使用'reloadData' ... – 2010-06-19 20:03:08