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.
You could implement a category that does it for you :
@implementation NSArray (SignedCount)
- (NSInteger) signedCount
{
NSInteger count = (NSInteger)[self count];
return count;
}
@end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With