不兼容的指针类型警告

时间:2013-04-04 18:15:42

标签: objective-c types variable-assignment compiler-warnings

我在iOS开发方面仍然有点绿色,并且不断收到我不确定的警告。

我在tableview中使用自定义单元格,并将其类设置为名为SiteCell的UITableViewCell的子类。在我的“didSelectRowAtIndexPath”方法中,当我将所选单元格声明为SiteCell类型时,我收到以下警告:

  

使用。初始化SiteCell __strong的指针类型不兼容   UITableViewCell类型的表达式

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    SiteCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    NSString *rowIdentity = [NSString stringWithFormat:@"%d", indexPath.row];
    [selectedRows setObject:[cell.siteTitleLabel text] forKey:rowIdentity];

    if(cell.accessoryType == UITableViewCellAccessoryCheckmark){
        cell.accessoryType = UITableViewCellAccessoryNone;
    }else{
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
}

任何人都可以解释如何摆脱这种警告吗?

3 个答案:

答案 0 :(得分:15)

假设cellForRowAtIndexPath已正确编码,并且已知总是返回SiteCell,您只需要转换为SiteCell*

SiteCell *cell = (SiteCell*)[tableView cellForRowAtIndexPath:indexPath];

答案 1 :(得分:3)

您的代码应该是这样的,因为您必须将UITableViewCell强制转换为您的子类SiteCell

SiteCell *cell = (SiteCell *)[tableView cellForRowAtIndexPath:indexPath];

答案 2 :(得分:1)

正确的方法。您需要NSIndexPath

SiteCell *cell = (SiteCell *) [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:section]];