我在XCode中为我的iOS项目打开了"符号比较"(又名-Wsign-compare)警告(令人惊讶的是,默认情况下它是关闭的)。在那之后,出现了许多这样的警告:
/Users/michalciuba/projects/GlobeMobile/Classes/ACMailController.m:86:19: Comparison of integers of different signs: 'NSInteger' (aka 'long') and 'NSUInteger' (aka 'unsigned long')
它们通常是通过将NSIndexPath
的属性NSInteger
row
与NSArray
的"count"方法返回的值进行比较引起的,如下所示:
if(indexPath.row < [self.myDataArray count])
该警告可以通过强制转换简单地修复:
if(indexPath.row < (NSInteger)[self.myDataArray count])
但是,如果每个地方都比较这些值,则必须这样做。它们正在数十个地方进行比较。 我想知道是否有更好,更聪明的方法来解决这个问题?我不想关闭此警告,因为它可能有助于防止无符号整数下溢等问题。
你可以实现一个为你做的类别:
@implementation NSArray (SignedCount)
- (NSInteger) signedCount
{
NSInteger count = (NSInteger)[self count];
return count;
}
@end