Ваша ошибка предполагает, что cellForRowAtIndexPath
возвращается nil
по некоторым причинам, и я предполагаю, что это - потому что Вам не удается исключить допускающую повторное использование ячейку из очереди. Если Вы хотите подтвердить это, просто установите точку останова после своего текущего вызова двухсторонней очереди: Я ожидаю, что Вы найдете cell
, установлен на nil
.
при использовании современных шаблонов XCode, где Вы сделали опытную ячейку для Вас, необходимо, вероятно, использовать это вместо этого:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
, Если Вы не используете шаблон Xcode, используйте ту строку кода, так или иначе затем регистрируют Ваш собственный идентификатор повторного использования как это:
[self.tableView registerClass:[UITableViewCell self] forCellReuseIdentifier:@"Cell"];
Весь являющийся хорошо, который должен разрешить проблему. я описал это более подробно для пользователей Swift.
Проверьте, добавили ли, что UITableViewDataSource были добавлены. Я пропустил это, так, чтобы приложение отказывало
Необходимо переопределить 'cellForRowAt' метод. Всего хорошего, если Вы не сделали этого
Осторожный, когда Вы мигрируете
В случае, если любой перемещает их код от более старых быстрых версий до более новых, это может произойти, если Вы неумышленно не изменяетесь UITableViewDataSource
синтаксис функций на более новый быстрый синтаксис.
, К сожалению, компилятор не будет жаловаться на это.
я столкнулся с этим, когда я перемещал свой код от быстрых 2 до быстрых 4. Я не изменил синтаксис cellForRow DataSource метода от:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
к его быстрым 4 версиям:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
и я получил ошибку:
"Failed to obtain a cell from its DataSource"
в моем случае я забыл изменяться от динамического прототипа до статической ячейки, проверять эту часть в Вашего интерфейсного разработчика
Удостоверьтесь, что Вы не забыли реализовывать Протоколы UITableViewDelegate и UITableViewDataSource.
class ExampleViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
В моем случае я был, забыл объявлять UITableViewDataSource, UITableViewDelegate для UITableview.
У меня была та же проблема, и это было, потому что я забыл реализовывать протоколы UITableViewDataSource и UITableViewDelegate
, просто добавляют их к Вашему объявлению класса после наследованного класса
, XCode должен предупредить меня об этом, потому что я использовал методы UITableViewDataSource и UITableViewDelegate в своем коде
Необходимо дать ячейке идентификатор. "Ячейка" дает идентификатору ячейки как в инспекторе атрибутов ячейки в поле идентификатора. Я воспроизвел Вашу ошибку, и это происходит из-за Вас, не дали идентификатор Вашей ячейке.
просто необходимо добавить UITableViewDelegate и , UITableViewDataSource
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
Используя Быстрые 3 я встретился с этой ошибкой, когда я забыл добавлять протоколы UITableViewDataSource и UITableViewDelegate к объявлению ViewController.
класс DataViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
, Добавляющий их, решил проблему.
Также попробуйте ниже кода
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
// Reuse and create cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Update cell data contents
cell.textLabel.text = @"Your text here";
cell.detailTextLabel.text=@"Your detailed text label";
return cell;
}
При использовании tableViewCell кроме UITableView необходимо зарегистрировать NIB сами. То, когда NIB не регистрируется "Неудавшийся для получения ячейки из ее DataSource" ошибка, может произойти. Из описания ошибки мне всегда трудно выяснить, что не так.
Эта ошибка может легко быть решена путем регистрации:
[self registerNib:[customerButtonTableViewCell class]
forCellReuseIdentifier:customerButtonCellIdentifier forTableView:tableView];
Сделав шаги, предложенные в других сообщениях, и проверяющий, была ли моя ячейка нолем, это, моя проблема не была разрешена, и моя ячейка была не показывание нолем, когда я проверил его. Однако добавление этого удобного фрагмента кода там решало вопрос, таким образом, это, должно быть, был ноль в какой-то момент, где я не ловил его.
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ClassNameOfMyCustomCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
Если Вы не загружаете Nib затем, необходимо сначала зарегистрировать Nib в viewDidLoad.
[self.tableView registerNib:[UINib nibWithNibName:@"RecruitmentDetailViewC" bundle:nil] forCellReuseIdentifier:@"RecruitmentDetailViewC"];
Вероятно, Вы не используете тот же Идентификатор, который Вы дали в основном управлении истории по опытной ячейке. Попробуйте к телевизору название Прописного нижнего регистра также, чтобы удостовериться, что Вы используете корректный идентификатор.
Удачи:)