В рассматриваемом приложении пользователи могут отмечать элементы как избранные. Когда у пользователя нет сохраненных избранных, я хотел бы уведомить их об этом факте (в основном я ненавижу идею пустого tableView).
Мой numberOfRowsInSection
равен нулю, когда нет элементов, отмеченных пользователем как избранное. Я хотел бы установить cell.textLabel.text = @"У вас нет избранного", но когда для таблицы нет элементов, cellForRowAtIndexPath
не вызывается.
Я мог бы протестировать numberOfRowsInSection
, чтобы получить результат, когда он встречает 0, а затем проверить 1 строку в cellForRowAtIndexPath
, а затем вставить пользовательский текст, но что, если у них есть только один любимый?
ОБНОВИТЬ
Я попытался реализовать идею, которую я придумал выше, и рекомендовал ниже, но, возможно, я делаю это неправильно, вероятно, из-за того, что это fetchedResultsController с методами делегата для обновления таблицы при изменении.
Я получаю эту ошибку, когда удаляю ячейку, когда в таблице есть только одна ячейка:
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1447.6.4/UITableView.m:976
Serious application error. An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (1) must be equal to the number of rows contained in that section before the update (1), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted). with userInfo (null)
и когда нет ячеек для отображения в первую очередь, происходит сбой:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[_PFBatchFaultingArray objectAtIndex:]: index (0) beyond bounds (0)'
Вот соответствующий код:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
id <NSFetchedResultsSectionInfo> sectionInfo = [[_fetchedResultsController sections] objectAtIndex:section];
if ([sectionInfo numberOfObjects]==0) {
return 1;
} else {
return [sectionInfo numberOfObjects];
}
}
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
if ([[_fetchedResultsController sections] objectAtIndex:0]==0) {
cell.textLabel.text = @"You have no favorites";
} else {
Shows *show = [_fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = show.ShowsToSerials.serialName;
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", show.showTitle];
}
}