diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.mm b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.mm index 9ff56383832de5..740a202bca7a71 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.mm +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.mm @@ -446,6 +446,15 @@ T RCTConvertTo(SEL selector, id json) if (objCArgType == @encode(id)) { id arg = RCTConvertTo(selector, objCArg); + + // Handle the special case where there is an argument and it must be nil + // Without this check, the JS side will receive an object. + // See: discussion at + // https://github.com/facebook/react-native/pull/49250#issuecomment-2668465893 + if (arg == [NSNull null]) { + return; + } + if (arg) { [retainedObjectsForInvocation addObject:arg]; }