UITableView数据源必须返回单元格...不明白为什么单元格为零

时间:2011-01-27 20:34:34

标签: ios uitableview

我正在iOS中编写一个简单的应用程序,我得到“ UITableView数据源必须从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;
}

我知道问题是cell0是零,但我无法弄清楚原因。

2 个答案:

答案 0 :(得分:0)

它是nil,因为你还没有设置它。声明和合成对象不会为您分配/初始化它。

您需要执行以下操作:

if (cell0 == nil) {
    cell0 = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    } 

答案 1 :(得分:0)

合成变量只是为它生成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.