However, by using the -setValue:forKeyPath: function, I got a "-[NSCFString charValue]: unrecognized selector sent to instance XXXXXX" error when it comes to setting value of any property of BOOL type.
I could only found a few reference on Stackoverflow.
@try { [(NSObject*)retObj setValue:[[obj keyValuePairs] objectForKey:key] forKeyPath:key]; } @catch (NSException * e) { if ([[e name] isEqualToString:NSInvalidArgumentException]) { NSNumber* boolVal = [NSNumber numberWithBool:[[[obj keyValuePairs] objectForKey:key] boolValue]]; [(NSObject*)retObj setValue:boolVal forKeyPath:key]; } }
Since I am not knowing the type until runtime, I need to catch the exception before converting the data type. But I am not sure whether any other type would cause the same exception and lead to an incorrect casting.
I haven't met any problem yet, and hopefully it is safe