Разница между: tableView.cellForRow и dataSource.cellForRowAtIndexPath - PullRequest
0 голосов
/ 04 июля 2018

В настоящее время я работаю над проектом и разработчиками, которые начали проект, используемый для доступа к ячейкам с

dataSource.cellForRowAtIndexPath(indexPath)

но я использую для доступа к ячейкам с

cellForRow(at: indexPath)

Кто-нибудь знает разницу и какой лучше использовать? Причина, по которой я спрашиваю, состоит в том, что dataSource.cellForRowAtIndexPath(indexPath) вызвало у нас эту аварию.

*** Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Попытка удаления из очереди несколько ячеек для одного и того же индекса пути, что не допускается. если ты действительно нужно удалить из очереди больше ячеек, чем запрашивает табличное представление, использовать -dequeueReusableCellWithIdentifier: метод (без индекса дорожка). Идентификатор ячейки: CheckTableViewCell, путь индекса: {длина = 2, путь = 1 - 0} '

Ответы [ 3 ]

0 голосов
/ 04 июля 2018
cellForRow(at: indexPath)

В любой момент времени, если вы хотите получить TableViewCell, вы должны использовать это.

dataSource.cellForRowAtIndexPath(indexPath)

Это для загрузки ячеек в UITableview и метод делегата iOS.

0 голосов
/ 04 июля 2018

Чтобы использовать один для нескольких раз, используйте метод ниже.

     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{
            let cell =tableView.dequeueReusableCell(withIdentifier: "Your reuse Identifier", for: indexPath) as! YourCell
        return cell
    }
0 голосов
/ 04 июля 2018

Разница заключается в следующем:

dataSource.cellForRowAtIndexPath(indexPath)

cellForRowAtIndexPath - это метод, который ваш источник данных предоставляет UITableView. Это вызвано iOS, чтобы загрузить ячейку для определенного indexPath. Он работает путем удаления очереди из многократно используемой ячейки и заполнения информации для этой ячейки.

Вы обычно не называете это. iOS делает.

cellForRow(at: indexPath)

Этот метод предоставляется iOS для возврата ячейки для определенного indexPath, если эта ячейка в данный момент отображается на экране, или nil, если ячейка не отображается на экране.

Этот метод предназначен для вызова, если у вас есть indexPath и вам нужна соответствующая ячейка.


Ваша ошибка происходит из-за того, что вы звоните cellForRowAtIndexPath, который освобождает многократно используемую ячейку для выполнения своей работы. Ячейка уже находится на экране и уже имеет связанную с ней ячейку, так что теперь их две, что не имеет смысла.

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