Я сталкивался с той же проблемой ранее, когда предоставлял поддержку 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
метод
ИЛИ
Выполнить этот код после некоторой задержки (Работало для меня)