To check if the NSNumber is float or int, you can use this method:
if ([val isMemberOfClass:[NSNumber class]])
{
switch(CFNumberGetType((CFNumberRef((NSNumber)val))
{
/* List of results:
kCFNumberSInt8Type
kCFNumberSInt16Type
kCFNumberSInt32Type
kCFNumberSInt64Type
kCFNumberFloat32Type
kCFNumberFloat64Type
kCFNumberCharType
etc... */
}
}
Once you found the type, just use:
float f = [((NSNumber)val) floatValue];
or
int i =[((NSNumber)val) intValue];
Find the whole list here:
To check that it's a NSString, just do:
if([val isMemberOfClass:[NSString class]])
{
}