I think the answer somewhat straightforward, and it's basically what you said yourself.
If someOtherMethodWithNSUInteger
expects unsigned and the only thing you have is a signed value (returned from someMethod
) then two things will happen: (1) half of the possible values expected will never be used, and (2) half of the possible values returned are invalid. No matter what method you use you will always have these issues. So the easiest thing to do is use a simple type-casting, and trim negative values to prevent them being interpreted as very large positive values.
[someOtherObject someOtherMethodWithNSUInteger: (NSUInteger)MAX(input,0)];