Загрузка UITableViewController из кода - PullRequest
0 голосов
/ 02 апреля 2012

У меня проблемы с тем, что я могу себе представить, это очень простая проблема. Я загружаю класс UITableViewController с именем LocationViewController из одного UIViewController:

LocationViewController *lvc = [[LocationViewController alloc] init];
[self.navigationController pushViewController:lvc animated:true];

В этом классе реализован 3 следующих метода:

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 3;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CityCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.textLabel.text = @"Test";
    return cell;
}

И я получаю следующую ошибку:

UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'

У меня раньше была эта ошибка при переходе между ViewControllers, использующими StoryBoard, это происходило из-за неверного CellIdentifier. Я понятия не имею, что я делаю не так. Я попытался загрузить файл пера с помощью этого ViewController, но при этом выдается та же ошибка.

Ответы [ 4 ]

3 голосов
/ 02 апреля 2012

Вы должны выделить ячейку.используйте этот код.

static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
0 голосов
/ 02 апреля 2012

dequeueReusableCellWithIdentifier - это кэш уже созданных UITableViewCells с вашим идентификатором "CityCell"

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

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MyIdentifier = @"CityCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
    }
    cell.textLabel.text = @"Test";

    return cell;
}

Посмотрите на таблицусм. руководство по программированию, чтобы узнать больше об этом:

Руководство по программированию таблицы

0 голосов
/ 02 апреля 2012

dequeueReusableCellWithIdentifier возвращает nil, если в очереди многократно используемых ячеек нет объектов. после вызова dequeueReusableCellWithIdentifier проверьте, равна ли ячейка нулю, в этом случае создайте новый UITableViewCell.

0 голосов
/ 02 апреля 2012

используйте этот код

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
 if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle  reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = @"Test";
return cell;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...