关于如何压制/修复"隐式转换改变签名的方法#34;警告

时间:2015-03-12 16:27:42

标签: objective-c xcode compiler-warnings

我正在对遗留项目进行现代化改造,并在Xcode上启用了-Wconversion标记。现在我有很多警告,比如

  

隐式转化更改签名:' NSUInteger' (又名'未签名   长期'到NSInteger' (又名'长')

在与UITableView

交互时使用以下代码
Item *item = [self.items objectAtIndex:indexPath.row];

row定义为NSInteger,而objectAtIndex:接受NSUInteger

有没有一种聪明的方法来修复这些警告?

3 个答案:

答案 0 :(得分:5)

更改row属性的类型以返回NSUInteger或执行此操作:

Item *item = [self.items objectAtIndex:(NSUInteger)(indexPath.row)];

如果您执行后者,则可能需要检查以确保row为正。


修改

由于rowNSIndexPath的属性,显然有充分的理由可能为负,或者Apple会将其设为NSUInteger,也许如果没有选择项目,它设置为-1。所以你应该做的是确保row的值不是负数,然后执行上面的转换来抑制警告,如下所示:

NSInteger row = indexPath.row
if (row >= 0)
{
    Item *item = [self.items objectAtIndex:(NSUInteger)row];
}
else
{
    // whatever you need to do for no row available
}

答案 1 :(得分:2)

通常你不应该试图成为聪明的"。

NSUInteger row = (NSUInteger)indexPath.row;
Item* item = self.items [row];

答案 2 :(得分:0)

升级到Xcode 11后,我一直收到此警告。 回到Xcode 10修复了这个问题。