我正在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是零,但我无法弄清楚原因。
答案 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.