关于如何抑制/修复“隐式转换更改签名”警告的食谱

Lor*_*o B 1 xcode objective-c compiler-warnings

我正在现代化旧项目,并-Wconversion在Xcode上启用了标记。现在我有很多警告,例如

隐式转换将签名更改:“ NSUInteger”(又名“ unsigned long”)更改为“ NSInteger”(又名“ long”)

与以下代码交互时使用以下代码 UITableView

Item *item = [self.items objectAtIndex:indexPath.row];
Run Code Online (Sandbox Code Playgroud)

row定义为NSIntegerwhile objectAtIndex:接受NSUInteger

是否有解决这些警告的明智方法?

Jer*_*myP 5

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

Item *item = [self.items objectAtIndex:(NSUInteger)(indexPath.row)];
Run Code Online (Sandbox Code Playgroud)

如果您选择后者,则可能需要检查以确保结果row是肯定的。


编辑

既然row是财产NSIndexPath显然有一个很好的理由,可能是负面的还是苹果会作出它的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
}
Run Code Online (Sandbox Code Playgroud)