Мой существующий TableViewController падает на бета1 Xcode 11 - PullRequest
2 голосов
/ 19 июня 2019

Я разработал UITableViewController экран. Работает нормально на Xcode 10.2 но. Когда я запускаю Xcode 11 beta 1 , он падает, как показано ниже.

Я не нашел, что происходит.

В ViewDidLoad

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.tableFooterView = UIView()
    plateNoPrefix.becomeFirstResponder() // static cell textfield in tableViewcell
}

Исключение ... Попытка получить доступ к visibleCells табличного представления, когда они находились в процессе обновления, что недопустимо

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

Это новое исключение в iOS 13, которое UITableView будет вызывать для предотвращения и проактивного оповещения вас о ситуации, которая ранее вызывала неопределенное поведение, а также о множестве странных, казалось бы, не связанных и трудных для отладкивопросы

Пожалуйста, ознакомьтесь с Apple Developer Forum

0 голосов
/ 19 июня 2019

Я сталкивался с той же проблемой ранее, когда предоставлял поддержку iOS 13.

Это новое исключение в iOS 13, которое будет вызываться UITableView, чтобы предупредить вас и предупредить оситуация, которая ранее вызывала неопределенное поведение и множество странных, казалось бы, не связанных и трудных для отладки проблем (включая сбои).

Здесь происходит то, что UITableView находится в процессе запроса своегоdataSource возвращает ячейку для каждого visible row и настраивает свойства возвращаемых ячеек, чтобы они могли отображаться.И в середине этого обновления - скорее всего внутри обратного вызова из самого табличного представления о конкретной строке, такой как tableView(_:cellForRowAt:) tableView(_:canEditRowAt:) и т. Д. - ваш код запрашивает табличное представление о возвращении visibleCells.Это, очевидно, проблематично, потому что UITableView находится прямо в середине подготовки этих ячеек, поэтому он не может вернуть значимый ответ.

Исправление для этого состоит в том, чтобы посмотреть, куда вы звоните visibleCells вобратный след, когда этот exception поднят, а затем выполните одно из двух действий:

Вариант 1:

Переместите использование visibleCells в лучшее место, чтобы вы не запрашивали visibleCells из какого-то места, которое вызывается в процессе создания / настройки / обновления этих же ячеек.Отличное место для запроса видимых ячеек - после того, как табличное представление размещено, поэтому, например, если табличное представление является представлением контроллера представления, вы можете использовать viewDidLayoutSubviews (), или в подклассе UITableView сделать этопосле вызова super.layoutSubviews().

Вариант 2:

В зависимости от того, что вы на самом деле пытаетесь сделать, вы можете пропуститьиспользуя visibleCells в целом.Например, вы можете использовать обратные вызовы tableView(_:willDisplay:forRowAt:) и tableView(_:didEndDisplaying:forRowAt:), чтобы отслеживать, когда ячейки видны вместо этого.

Если вы нажимаете это исключение и думаете, что запрашивает visibleCells из местоположения, котороедолжен быть действительным / разрешенным, пожалуйста, поделитесь обратной трассировкой, когда вы нажмете это исключение, и подробно о том, что вы пытаетесь сделать.

Официальные документы Apple

Обновление:

Я уверен, но plateNoPrefix.becomeFirstResponder() вызывает сбой.На данный момент вы можете проверить, вставив этот код в viewDidAppear метод

ИЛИ

Выполнить этот код после некоторой задержки (Работало для меня)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...