当我尝试运行此程序时,出现错误:“控件可能会达到非空函数的结束”。你知道如何解决这个问题吗?当我尝试在最后两个闭合括号之间进行返回时,它显示另一个错误。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UILabel *label;
if (indexPath.section == 0 && indexPath.row == 0) {
static NSString *CellIdentifer1 = @"GameDetailsSetScoringCell";
UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:CellIdentifer1];
label = (UILabel *)[cell1 viewWithTag:0];
label.text = [NSString stringWithFormat: @"Standard Set: 3 Sets"];
return cell1;
}
if (indexPath.section == 1 && indexPath.row == 0) {
static NSString *CellIdentifer2 = @"GameDetailsDateTimeCell";
UITableViewCell *cell2 = [tableView dequeueReusableCellWithIdentifier:CellIdentifer2];
label = (UILabel *)[cell2 viewWithTag:0];
label.text = [NSString stringWithFormat: @"March 5, 2015 5:25"];
return cell2;
}
if (indexPath.section == 2 && indexPath.row == 0) {
static NSString *CellIdentifer3 = @"GameDetailsLocationCell";
UITableViewCell *cell3 = [tableView dequeueReusableCellWithIdentifier:CellIdentifer3];
label = (UILabel *)[cell3 viewWithTag:0];
label.text = [NSString stringWithFormat: @"Bridgewater, NJ"];
return cell3;
}
if (indexPath.section == 3 && indexPath.row == 0) {
static NSString *CellIdentifer4 = @"GameDetailsMatchModeCell";
UITableViewCell *cell4 = [tableView dequeueReusableCellWithIdentifier:CellIdentifer4];
label = (UILabel *)[cell4 viewWithTag:0];
label.text = [NSString stringWithFormat: @"Normal Mode"];
return cell4;
}
if (indexPath.section == 4 && indexPath.row == 0) {
static NSString *CellIdentifer5 = @"GameDetailsAdCell";
UITableViewCell *cell5 = [tableView dequeueReusableCellWithIdentifier:CellIdentifer5];
label = (UILabel *)[cell5 viewWithTag:0];
label.text = [NSString stringWithFormat: @"NO"];
return cell5;
}
}
如果我尝试在最后两个右括号之间添加(返回单元格;)或甚至(返回cell1;),我会收到错误:
使用未声明的标识符'cell' 要么 使用未声明的标识符'cell1'
答案 0 :(得分:2)
问题只是满足编译器的问题。 您相信您正在涵盖所有可能的情况并在所有情况下返回一个单元格,但编译器不知道这一点。如果if
条件的 none 成功,该怎么办?如果索引路径行不 0怎么办?如果索引路径部分不是0到4,该怎么办?您可能认为这是不可能的,但编译器并不这么认为。在这种情况下你需要返回一个单元格。
答案 1 :(得分:0)
正如@matt +1所说,你必须为每个可能的案例返回一个值。当程序没有输入任何if范围时你不会这样做。好吧,你不可能这么想。但是这位漫画家不知道。
我修改了您的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UILabel *label;
UITableViewCell *cell = nil;
if (indexPath.section == 0 && indexPath.row == 0) {
static NSString *CellIdentifer1 = @"GameDetailsSetScoringCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer1];
label = (UILabel *)[cell viewWithTag:0];
label.text = [NSString stringWithFormat: @"Standard Set: 3 Sets"];
}
else if (indexPath.section == 1 && indexPath.row == 0) {
static NSString *CellIdentifer2 = @"GameDetailsDateTimeCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer2];
label = (UILabel *)[cell viewWithTag:0];
label.text = [NSString stringWithFormat: @"March 5, 2015 5:25"];
}
else if (indexPath.section == 2 && indexPath.row == 0) {
static NSString *CellIdentifer3 = @"GameDetailsLocationCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer3];
label = (UILabel *)[cell viewWithTag:0];
label.text = [NSString stringWithFormat: @"Bridgewater, NJ"];
}
else if (indexPath.section == 3 && indexPath.row == 0) {
static NSString *CellIdentifer4 = @"GameDetailsMatchModeCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer4];
label = (UILabel *)[cell viewWithTag:0];
label.text = [NSString stringWithFormat: @"Normal Mode"];
return cell;
}
else if (indexPath.section == 4 && indexPath.row == 0) {
static NSString *CellIdentifer5 = @"GameDetailsAdCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer5];
label = (UILabel *)[cell viewWithTag:0];
label.text = [NSString stringWithFormat: @"NO"];
}
return cell;
}