我收到“到达非空函数结束”警告,但没有其他任何东西可以返回编译器。我该如何解决警告?
我正在使用customCells来显示包含3个部分的表格。每个CustomCell都是不同的,与App中的另一个viewcontroller的tableview链接,并从其单个模型获取其数据。模拟器和设备中的一切都很好用,但我想摆脱我的警告。它是我唯一拥有的,它正在等待我上传到App Store !!
在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
中,我使用了3个单独的If()语句 - (即== 0,== 1,== 2)来控制在整个tableview的单元格中每个部分中显示哪些customCell。每个customCell都是在IB中创建的,从不同的模型中提取数据,并与其他ViewController tableViews一起使用。
在函数结束时,我没有要返回的“单元格”或其他内容,因为我已经在每个If()语句中指定了要返回的CustomCell。
因为每个CustomCell都是通过AppDelegate引用的,所以我不能在函数的开头设置一个空单元格,只需在每个If()语句中将空单元格设置为等于所需的CustomCell,就像你一样可以用于文字,标签等...
我的问题不在于修复If()语句中的代码,除非是必需的。我的问题在于“当我已经为每种可能的情况返回一个值时,如何删除非空函数结束的警告 - (cellForRowAtIndexPath :):if(section == 0); if(section == 1) ;以及if(section == 2)。
*代码参考:为简单起见,实际的文件名被删除了(第0部分指的是M,第1部分指的是D,第2部分指的是B)。
以下是代码的布局示例:
//CELL FOR ROW AT INDEX PATH:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//Reference to the AppDelegate:
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
//Section 0:
if(indexPath.section == 0) {
static NSString *CustomMCellIdentifier = @"CustomMCellIdentifier";
MCustomCell *mCell = (MCustomCell *)[tableView dequeueReusableCellWithIdentifier:CustomMCellIdentifier];
if (mCell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MCustomCell" owner:tableView options:nil];
for (id oneObject in nib)
if ([oneObject isKindOfClass:[MCustomCell class]])
mCell = (MCustomCell *)oneObject;
}
//Grab the Data for this item:
M *mM = [appDelegate.mms objectAtIndex:indexPath.row];
//Set the Cell
[mCell setM:mM];
mCell.selectionStyle =UITableViewCellSelectionStyleNone;
mCell.root = tableView;
return mCell;
}
//Section 1:
if(indexPath.section == 1) {
static NSString *CustomDCellIdentifier = @"CustomDCellIdentifier";
DCustomCell *dCell = (DCustomCell *)[tableView dequeueReusableCellWithIdentifier:CustomDaddyCellIdentifier];
if (dCell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DCustomCell" owner:tableView options:nil];
for (id oneObject in nib)
if ([oneObject isKindOfClass:[DCustomCell class]])
dCell = (DCustomCell *)oneObject;
}
//Grab the Data for this item:
D *dD = [appDelegate.dds objectAtIndex:indexPath.row];
//Set the Cell
[dCell setD:dD];
//Turns the Cell's SelectionStyle Blue Highlighting off, but still permits the code to run!
dCell.selectionStyle =UITableViewCellSelectionStyleNone;
dCell.root = tableView;
return dCell;
}
//Section 2:
if(indexPath.section == 2) {
static NSString *CustomBCellIdentifier = @"CustomBCellIdentifier";
BCustomCell *bCell = (BCustomCell *)[tableView dequeueReusableCellWithIdentifier:CustomBCellIdentifier];
if (bCell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"BCustomCell" owner:tableView options:nil];
for (id oneObject in nib)
if ([oneObject isKindOfClass:[BCustomCell class]])
bCell = (BCustomCell *)oneObject;
}
//Grab the Data for this item:
B *bB = [appDelegate.bbs objectAtIndex:indexPath.row];
//Set the Cell
[bCell setB:bB];
bCell.selectionStyle =UITableViewCellSelectionStyleNone;
bCell.root = tableView;
return bCell;
}
//** Getting Warning "Control reaches end of non-void function"
//Not sure what else to "return ???" all CustomCells were specified within the If() statements above for their corresponding IndexPath.Sections.
}
任何建议??
答案 0 :(得分:1)
无论您是否正在处理{}块内的返回,您都需要在函数结束时返回。尝试:
return nil;
它永远不会被执行,但你会得到编译器的回报。我坦率地重新设计声明。
答案 1 :(得分:0)
不要使用三个单独的if
语句,而是将其更改为if() - else if() - else