“警告到达非空函数结束”,其中包含多个部分,这些部分在cellForRowAtIndexPath中引入多个CustomCell

时间:2010-03-11 18:05:08

标签: iphone uitableview warnings

我收到“到达非空函数结束”警告,但没有其他任何东西可以返回编译器。我该如何解决警告?

我正在使用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.

 }

任何建议??

2 个答案:

答案 0 :(得分:1)

无论您是否正在处理{}块内的返回,您都需要在函数结束时返回。尝试:

return nil;

它永远不会被执行,但你会得到编译器的回报。我坦率地重新设计声明。

答案 1 :(得分:0)

不要使用三个单独的if语句,而是将其更改为if() - else if() - else