mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
TM iOS: attempt to convert number args using RCTConvert as well
Summary: Some native modules methods expects number-based args like `NSDate`. For backward compatibility, the incoming numbers should be converted using RCTConvert, just like object args. Reviewed By: mdvacca Differential Revision: D15748968 fbshipit-source-id: 4db2cb0c41eda1bbe8cde7b0365d9c3d675f5fb5
This commit is contained in:
committed by
Facebook Github Bot
parent
7225daf98d
commit
c0bf53b716
@@ -460,6 +460,29 @@ NSInvocation *ObjCTurboModule::getMethodInvocation(
|
||||
*/
|
||||
if (objCArgType[0] == _C_ID) {
|
||||
id objCArg = [NSNumber numberWithDouble:v];
|
||||
NSString *methodNameNSString = @(methodName.c_str());
|
||||
|
||||
/**
|
||||
* Convert numbers using RCTConvert if possible.
|
||||
*/
|
||||
NSString *argumentType = getArgumentTypeName(methodNameNSString, i);
|
||||
if (argumentType != nil) {
|
||||
NSString *rctConvertMethodName = [NSString stringWithFormat:@"%@:", argumentType];
|
||||
SEL rctConvertSelector = NSSelectorFromString(rctConvertMethodName);
|
||||
|
||||
if ([RCTConvert respondsToSelector:rctConvertSelector]) {
|
||||
// Message dispatch logic from old infra
|
||||
id (*convert)(id, SEL, id) = (__typeof__(convert))objc_msgSend;
|
||||
id convertedObjCArg = convert([RCTConvert class], rctConvertSelector, objCArg);
|
||||
|
||||
[inv setArgument:(void *)&convertedObjCArg atIndex:i + 2];
|
||||
if (convertedObjCArg) {
|
||||
[retainedObjectsForInvocation addObject:convertedObjCArg];
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
[inv setArgument:(void *)&objCArg atIndex:i + 2];
|
||||
[retainedObjectsForInvocation addObject:objCArg];
|
||||
} else {
|
||||
@@ -486,7 +509,7 @@ NSInvocation *ObjCTurboModule::getMethodInvocation(
|
||||
NSString *rctConvertMethodName = [NSString stringWithFormat:@"%@:", argumentType];
|
||||
SEL rctConvertSelector = NSSelectorFromString(rctConvertMethodName);
|
||||
|
||||
if ([RCTConvert respondsToSelector: rctConvertSelector]) {
|
||||
if ([RCTConvert respondsToSelector:rctConvertSelector]) {
|
||||
// Message dispatch logic from old infra
|
||||
id (*convert)(id, SEL, id) = (__typeof__(convert))objc_msgSend;
|
||||
id convertedObjCArg = convert([RCTConvert class], rctConvertSelector, objCArg);
|
||||
|
||||
Reference in New Issue
Block a user