【问题标题】:Multiple methods named error. Multiple classes involved多个名为错误的方法。涉及多个类
【发布时间】:2015-05-27 02:26:39
【问题描述】:

代码“return [cell height]”的最后一行给了我一个错误“发现多个名为“height”的方法的结果、参数类型或属性不匹配”。此代码在 32 位上运行良好,但在 64 位(模拟器)上运行良好。

请有人帮忙解决这个问题。还有其他帖子提到了这一点,但它们只有一种可以类型转换的类。我在数组 self.cells 中有不同的类

我可以检查每个“单元格”的类类型,然后返回相应的高度,但这是一个繁琐的代码。有更好的方法吗?

非常感谢您的帮助。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:  (NSIndexPath *)indexPath
{
    id cell = self.cells[indexPath.row];
    if ([cell isKindOfClass:[TripCell class]])
    {
        return 150;
    }
    return [cell height];
}

【问题讨论】:

  • 尝试返回 cell.bounds.size.height .... [cell height] 不是你可以调用的方法,除非你做了。

标签: ios objective-c uitableview 64-bit


【解决方案1】:

您的“单元格”被声明为具有“id”类型。这意味着编译器根本不知道它是什么类型的对象。因此,如果您将消息“height”发送到声明为 id 的对象,编译器会假定它是它知道的名为“height”的方法之一。如果您有不同的名为“height”且返回类型不同的方法,则编译器不知道此调用将返回什么。

例如,如果您有一个方法 - (int) height 在一个类中,而另一个方法 - (CGFloat) height 在另一个类中,编译器不知道该方法返回的值是 int 还是 CGFloat。

解决方案是:将单元格从“id”转换为特定类型,最好是正确的类型。或者不要对名为“height”的方法使用不同的返回类型。

【讨论】:

  • 我建议,CGFloat 是罪魁祸首。在 32 位 CGFloat 上是浮动的。在 64 位 CGFloat 是双倍的。所以方法 -(float)height;和 -(CGFloat) 高度; 32位相同,64位不同。
  • 非常感谢大家。问题出在浮点数和 CGFloat 上。更改了所有方法以返回 CGFloat 并解决了问题。
猜你喜欢
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多