Не удалось установить значения в пользовательской ячейке в UITableView из NSMutableArray

Помогите мне избавиться от этой дилеммы, которая возникла, когда я пытался освободить ячейку (Custom Cell). Ниже приведены некоторые шаги и отступы, которые я сделал с моим проектом.

Самое первое, я перетаскиваю UITableView в свой ViewController и добавляю ViewController.h, делая после этого

@interface ViewController : UIViewController <UITableViewDataSource,UITableViewDelegate>

Затем я создал Custom Cell с 3 UILabels и изменил высоту Cell на 65.

После этого я сделал свойство в ViewController.m

@property (nonatomic,strong) NSMutableArray *myTodoTitles;

Затем в методе (ViewDidLoad) я сделал.

myTodoTitles = [NSMutableArray arrayWithCapacity:10];
[myTodoTitles addObject:@"Go for ride"];
[myTodoTitles addObject:@"Do University Assignments"];
[myTodoTitles addObject:@"Watch Show"];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[self.myTodoTitles count]-1 inSection:1];


[self tableView:self.myTodoTable cellForRowAtIndexPath:indexPath];

После этого я просто сделал эти вещи в моем ViewController.m

#pragma mark - Table view data source

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *myIdentifier = @"TodoCell";
    TodoCell *todoCell = (TodoCell*)[tableView dequeueReusableCellWithIdentifier:myIdentifier];

    todoCell.todoTitleLabel.text = [self.myTodoTitles objectAtIndex:indexPath.row];

    return todoCell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [myTodoTitles count];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

Но когда я запускаю проект, он ничего не выдал. Пожалуйста помоги

2 ответа

Скорее всего, вы не подключили свой viewController к источнику данных вашего tableView. Это можно сделать из Interface Builder или из кода. Вы можете легко проверить это, добавив self.myTodoTable.dataSource = self; в самом начале viewDidLoad метод.

А также: что вы имели в виду под `

[self tableView:self.myTodoTable cellForRowAtIndexPath:indexPath];` 

в viewDidLoad? Похоже, вы хотели сделать

[self.myTodoTable reloadData];

Есть UITableView методы с похожим именем:

- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier

а также

- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier
                           forIndexPath:(NSIndexPath *)indexPath

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

Последний всегда будет возвращать действительную ячейку: хотя вам придется заранее зарегистрировать определенный класс или NIB с этим табличным представлением. Документы

РЕДАКТИРОВАТЬ:

Как указывало ReDetection: первый метод также будет возвращать действительную ячейку, если вы зарегистрировали правильный класс (или nib) с этим табличным представлением.

В вашем случае это означает, что вы должны зарегистрироваться TodoCell в viewDidLoad с вашим tableView,

Если TodoCell сделано без.xib:

[self.tableView registerClass:[ToDoCell class]
       forCellReuseIdentifier:@"TodoCell"];

Или если это сделано с.xib.

[self.tableView registerNib:[UINib nibWithNibName:@"TodoCell" 
                                           bundle:nil]
     forCellReuseIdentifier:@"TodoCell"];

EDIT2:

В вашем коде также отсутствует настройка источника данных. Что-то вроде:

self.tableView.dataSource = self;

Это вызовет начальную перезагрузку.

Возможно, вы захотите установить делегата (так как ваш контроллер утверждает, что принимает этот протокол) таким же образом.

Другие вопросы по тегам