我正在对遗留项目进行现代化改造,并在Xcode上启用了-Wconversion
标记。现在我有很多警告,比如
隐式转化更改签名:' NSUInteger' (又名'未签名 长期'到NSInteger' (又名'长')
在与UITableView
Item *item = [self.items objectAtIndex:indexPath.row];
row
定义为NSInteger
,而objectAtIndex:
接受NSUInteger
。
有没有一种聪明的方法来修复这些警告?
答案 0 :(得分:5)
更改row
属性的类型以返回NSUInteger
或执行此操作:
Item *item = [self.items objectAtIndex:(NSUInteger)(indexPath.row)];
如果您执行后者,则可能需要检查以确保row
为正。
修改强>
由于row
是NSIndexPath
的属性,显然有充分的理由可能为负,或者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修复了这个问题。