Источник данных UITableView должен возвращать ячейку ... не понимаю, почему ячейка равна нулю - PullRequest
1 голос
/ 27 января 2011

Я пишу простое приложение для iOS и получаю сообщение об ошибке « UITableView dataSource должен вернуть ячейку из tableView: cellForRowAtIndexPath: »Я пытаюсь создать статическое содержимое строки.

My view controller называется "StartViewController".В файле .xib у меня есть 3 UITableViewCell objects с именем "Section 0 Cell", "Section 1 Cell" and "Section 2 Cell".Они определены в файле .h как:

@interface StartViewController : UITableViewController
{
 UITableViewCell *cell0;
 UITableViewCell *cell1;
 UITableViewCell *cell2;
}
@property (nonatomic, retain) IBOutlet UITableViewCell *cell0;
@property (nonatomic, retain) IBOutlet UITableViewCell *cell1;
@property (nonatomic, retain) IBOutlet UITableViewCell *cell2;

В файле .m они были синтезированы.Я не могу опубликовать фотографию моего создателя интерфейса, поскольку у меня еще нет репутации 10.

Ячейки заполнены так:

- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Processing section: %d, row: %d",[indexPath section], [indexPath row]);

if (cell0 == nil) 
  NSLog(@"cell0 is nil");

if (([indexPath section] == 0) && ([indexPath row] == 0))
  return cell0;

if (([indexPath section] == 1) && ([indexPath row] == 0))
  return cell1;

if (([indexPath section] == 2) && ([indexPath row] == 0))
  return cell2;

return cell0;
}

Я знаю, что проблема в том, что ячейка 0 равна нулю, но я не могу понять, почему.

Ответы [ 2 ]

0 голосов
/ 28 января 2011

Синтезирование переменной просто генерирует для нее методы get / set, но фактически ничего не делает с переменной для инициализации объекта.Вы все еще должны будете сделать это в своем собственном коде.На самом деле вам даже не нужны переменные для этого, вы можете сделать что-то вроде:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    static NSString *CellIdentifier = @"myCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    if ( [indexPath section] == 0 && [indexPath row] == 0)
    {
        [[cell textLabel] setText] = @"Hi Mom";
    }
    if ( [indexPath section] == 1 && [indexPath row] == 0)
    {
        [[cell textLabel] setText] = @"Hi Dad";
    }
    //etc.
0 голосов
/ 27 января 2011

Это nil, потому что вы еще не настроили его.Объявление и синтез объекта не выделяет / инициализирует его для вас.

Вам нужно сделать что-то вроде:

if (cell0 == nil) {
    cell0 = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...