我已經實現了一個使用UITableViewController/UITableView和Core Data的iPhone應用程序。此外,我使用NSFetchedResultsController來管理表格數據。這一切都非常簡單,並且效果很好。然後我決定當沒有找到/檢索到行時,我應該在UITableView中顯示一條消息。經過研究,似乎做到這一點的最好方法(也許是唯一的方法)是返回一個包含該消息的「虛擬」單元。但是,當我這樣做時,我從運行系統中得到一個令人厭惡的圖表,它抱怨(並且正確地)關於數據不一致:「無效的更新:無效的部分數量。表格視圖中包含的部分數量...」。下面是相關的代碼:從類似的問題在覈心數據UITableView中顯示「找不到行」消息
- (NSInteger) numberOfSectionsInTableView: (UITableView *)tableView
{
if ([[self.fetchedResultsController fetchedObjects] count] == 0) return 1;
return [[self.fetchedResultsController sections] count];
}
- (NSInteger) tableView: (UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if ([[self.fetchedResultsController fetchedObjects] count] == 0) return 1;
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex: section];
return [sectionInfo numberOfObjects];
}
- (UITableViewCell *) tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
if ([[self.fetchedResultsController fetchedObjects] count] == 0) {
UITableViewCell *cell = [[UITableViewCell alloc] init];
cell.textLabel.text = @"No widgets found.";
return cell;
}
STCellView *cell = (STCellView *)[tableView dequeueReusableCellWithIdentifier: @"ShieldCell"];
[self configureCell: cell atIndexPath: indexPath];
return cell;
}
我已閱讀和迴應似乎我應該使用
insertRowsAtIndexPaths: withRowAnimation:
的「虛擬」的信息行插入到我的表。但是,這也意味着在插入實際行時刪除「虛擬」行。我可以做到這一點,但似乎應該有一個更簡單的方法來實現這一點。我想要做的就是顯示一條消息,指出表中沒有行(很簡單?)。所以,我的問題是這樣的:有沒有辦法在UITableView中顯示消息,而不使用「虛擬」單元格方法,或者有沒有辦法說服UITableViewController/NSFetchResulsController這只是一個「虛擬」行,他們不應該得到因爲它在表格中不是一個真正的行(從我的角度來看),所以感到不安?
你可以提供任何幫助將是非常讚賞(我是一個新手,掙扎到iPhone發展,我想學習的最佳實踐)。謝謝。
而不是破解tableview數據源以獲得預期的UI爲什麼不添加「找不到行」消息到tableview頭? – Rog
@Rog有用的提示。 +1 –
如果在表格視圖中只有一個部分,這是最好的方法。看到我的方法下面的多個部分 – Brett