UITableViewAlertForLayoutOutsideViewHierarchy, когда UITableView не имеет окна iOS13 - PullRequest
0 голосов
/ 27 сентября 2019

Я начал получать предупреждение (ниже) на iOS13.Я заметил, что это предупреждение появляется из-за того, что окно UITableView пусто (выбрана другая вкладка, выдвинут подробный контроллер представления при выборе таблицы ...).Я пытаюсь обновить UITableView от NSFetchedResultController делегата.Как правильно сделать это на iO13, чтобы обновлять таблицу?

Код, приведенный ниже, отлично работал в предыдущих выпусках.

PS: Любой тип beginUpdates, reloadRowsAtIndexPaths:withRowAnimation:, insertSections:withRowAnimation:, endUpdates вызовет это предупреждение.

PS: я попытался перезагрузить таблицу, но если я вернусь назад, я потеряю анимацию, чтобы отменить выбор строки (очистить выбор строки).

2019-09-27 09: 40: 42.849128 + 0200 xxx [63595: 9762090] [TableView] Только одно предупреждение: UITableView было приказано расположить свои видимые ячейки и другое содержимое, не находясь в иерархии представлений (представление таблицы или одно из ее суперпредставлений имеетне был добавлен в окно).Это может привести к ошибкам, заставляя представления внутри табличного представления загружаться и выполнять компоновку без точной информации (например, границ табличного представления, сбора признаков, полей макета, вставок безопасной области и т. Д.), А также приведет к ненужным накладным расходам производительности из-за дополнительных проходов макета.,Создайте символическую точку останова в UITableViewAlertForLayoutOutsideViewHierarchy, чтобы перехватить это в отладчике и посмотреть, что вызвало это, чтобы вы могли вообще избежать этого действия, если это возможно, или отложить его, пока представление таблицы не будет добавлено в окно.Вид таблицы:;слой =;contentOffset: {0, -64};contentSize: {375, 3432};AdjustContentInset: {64, 0, 0, 0};Источник данных:>

// ------------  ------------  ------------  ------------  ------------  ------------
#pragma mark - FetchedResultsController delegate

- (void) controllerWillChangeContent:(NSFetchedResultsController *)controller {
//    if (self.tableView.window) {
        [self.tableView beginUpdates];
//    }
}
- (void) controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {

    if (type == NSFetchedResultsChangeInsert && newIndexPath != nil) {
        [self.tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    }

    if (type == NSFetchedResultsChangeUpdate && indexPath != nil) {
        [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
//        id<CellLoadable> cell = [self.tableView cellForRowAtIndexPath:indexPath];
//        [cell loadData:anObject];
    }

    if (type == NSFetchedResultsChangeMove && indexPath != nil && newIndexPath != nil) {
        // if cell is visible, update it
        id<CellLoadable> cell = [self.tableView cellForRowAtIndexPath:indexPath];
        [cell loadData:anObject];
        [self.tableView moveRowAtIndexPath:indexPath toIndexPath:newIndexPath];
    }
}

- (void) controller:(NSFetchedResultsController *)controller didChangeSection:(id<NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {

    if (type == NSFetchedResultsChangeInsert) {
        [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
    }
    if (type == NSFetchedResultsChangeDelete) {
        [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
    }
}

- (void) controllerDidChangeContent:(NSFetchedResultsController *)controller {
//    if (self.tableView.window) {
        [self.tableView endUpdates];
//    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...