Calling numberOfRowsInSection: from heightForRowAtIndexPath

Только что обнаружил очень странное и неожиданное поведение в классе UITableView. Мне нужно последняя ячейка таблицы в моем разделе должна отличаться по высоте от других ячеек, поэтому я делаю в основном следующее:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section] - 1)
        return 44;
    else
        return 88; //double size for all but the last row
}

Кажется довольно простым, но когда я запускаю ее, я получаю бесконечный цикл, и он вылетает. определила, что когда я вызываю numberOfRowsInSection: , он вызывает метод моего источника данных tableView: numberOfRowsInSection: . Это имеет смысл, поскольку метод tableView возвращает кэшированную версию значения источника данных, поэтому ему необходимо получить значение из источника данных в первый раз. Но затем он вызывает heightForRowAtIndexPath, снова передавая ему indexPath [0, 0]! И делает это безостановочно.

Я смог обойти это, используя вместо этого

[self tableView:tableView numberOfRowsInSection:indexPath.section]

(вызывая мой метод источника данных вместо метода tableView). Кто-нибудь знает, почему он это делает? Это определенное поведение? Или ошибка в структуре Apple TableView?

13
задан GendoIkari 7 December 2010 в 21:31
поделиться