12

我有一個NSFetchedResultController具有不同的部分。 我有一個崩潰當我嘗試使用UISearchDisplayController搜索:在兩部分中搜索時發生崩潰

*** Assertion failure in -[UITableViewRowData rectForRow:inSection:], /SourceCache/UIKit/UIKit-2372/UITableViewRowData.m:1630 

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'request for rect at invalid index path (<NSIndexPath 0x1d2c4120> 2 indexes [0, 1])' 

我檢查,我的搜索陣列有確實的兩個條目(預期結果):

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 

返回1

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

It returns 2

有趣的是,如果我只有一個部分,它完美的作品。

請幫忙! :)

回答

38

不知道,如果你想通了,我想你沒有,但假設你使用

[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

在你的cellForRowAtIndexPath

if (tableView == self.searchDisplayController.searchResultsTableView) { 
    cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
} else { 
    cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
} 

也確保您正在使用self.tableView

+3

你能解釋一下這個原因嗎?只是想知道它可能會幫助我解決未來的另一個問題。 – Jeremy1026

+9

這是因爲您在爲單元格詢問self.tableView。但indexPath在搜索時是搜索表的索引路徑。索引路徑不一定對self.table有效,因此該索引路徑無法傳遞給它。因爲CellIdentifier尚未在搜索表中進行註冊,所以需要向cell請求self.table。 –

+0

是的,讓事情發揮作用仍然很愚蠢! :) –