I turned 'Signed Comparision' (aka -Wsign-compare) warnings for my iOS project in XCode (surprisingly, it was off by default). After that lots of warnings like this appeared:
/Users/michalciuba/projects/GlobeMobile/Classes/ACMailController.m:86:19: Comparison of integers of different signs: 'NSInteger' (aka 'long') and 'NSUInteger' (aka 'unsigned long')
They are usually caused by comparing row
property of NSIndexPath
which is NSInteger
to the value returned by 'count' method of NSArray
, like this:
if(indexPath.row < [self.myDataArray count])
The warning can be simply fixed by casting:
if(indexPath.row < (NSInteger)[self.myDataArray count])
However, it has to be done if every single place where such values are being compared. And they are being compared in dozens of places. I wonder if there is a better and more clever way to solve this problem? I don't want to turn off this warning, because it may help to prevent issues like unsigned integer underflow.
if(indexPath.row <= self.myDataArray.count-1)
– Liverish