use %ld/%lu instead of %d for NSInteger/NSUInteger to silence the warnings