Ios 为什么React Native/Objective-C抱怨我用错误数量的参数调用我的方法?

Ios 为什么React Native/Objective-C抱怨我用错误数量的参数调用我的方法?,ios,objective-c,swift,react-native,Ios,Objective C,Swift,React Native,我正在使用Objective-C和Swift开发React本机应用程序 目前,我正试图用一个使用承诺的更优雅的解决方案取代当前使用EventEmitter的方法 但是,我遇到了一些问题,因为编译器/解释器抱怨我使用错误数量的参数调用我的方法: ExceptionManager.js:71 RecorderBridge.startRecording调用时使用了0个参数,但需要1个参数。如果您自己没有更改此方法,这通常意味着您的本机代码和JavaScript代码版本不同步。更新这两个选项将消除此错误

我正在使用Objective-C和Swift开发React本机应用程序

目前,我正试图用一个使用承诺的更优雅的解决方案取代当前使用EventEmitter的方法

但是,我遇到了一些问题,因为编译器/解释器抱怨我使用错误数量的参数调用我的方法:

ExceptionManager.js:71 RecorderBridge.startRecording调用时使用了0个参数,但需要1个参数。如果您自己没有更改此方法,这通常意味着您的本机代码和JavaScript代码版本不同步。更新这两个选项将消除此错误。

然而,我实际上没有任何参数,除了解析器和拒绝器,编译器/解释器不应该抱怨它们

我的代码如下所示:

Recorder.js

...
startRecording = () => {
  RecorderNative.startRecording();
};
...
import { NativeModules } from 'react-native';

const { RecorderBridge } = NativeModules;

export default {
  startRecording() {
    return RecorderBridge.startRecording();
  }
}
RecorderNativeModule.js

...
startRecording = () => {
  RecorderNative.startRecording();
};
...
import { NativeModules } from 'react-native';

const { RecorderBridge } = NativeModules;

export default {
  startRecording() {
    return RecorderBridge.startRecording();
  }
}
RecorderBridge.m

@implementation RecorderBridge 
  ...
  RCT_EXPORT_METHOD(startRecording: resolver:(RCTPromiseResolveBlock)resolve
                  rejecter:(RCTPromiseRejectBlock)reject) {
    BOOL result = [myRecorderViewController startRecording];

    if (result) {
      resolve();
    } else {
      reject();
    }
  }
 ...
@end
记录器控制器.swift

@objc open class RecorderViewController : UIViewController {
  @objc func startRecording() -> Bool {
    do {
      // Try to start recording
      try recorder.record();
      return true
    } catch {
      print("Errored recording.")
      return false
    }
  }
}

导出的方法语法有一个问题,实际上您需要一个参数,但没有得到错误,因为它被传递到RN宏。在Objective-C中,不标记第一个参数

与此相反:

RCT_EXPORT_METHOD(startRecording: resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
应该是这样的:

RCT_EXPORT_METHOD(startRecording:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)

导出的方法语法有一个问题,实际上您需要一个参数,但没有得到错误,因为它被传递到RN宏。在Objective-C中,不标记第一个参数

与此相反:

RCT_EXPORT_METHOD(startRecording: resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
应该是这样的:

RCT_EXPORT_METHOD(startRecording:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)

如果第一个参数使用不同的参数(如NSDictionary),情况会如何?谢谢第一个参数的处理与上面的示例完全相同。第一个参数只是没有标记。在本例中,如果希望第一个参数是
NSDictionary
,可以将其更改为:
RCT\u EXPORT\u方法(startRecording:(NSDictionary*)params resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
如果第一个参数使用不同的参数(如NSDictionary),情况会如何?谢谢第一个参数的处理与上面的示例完全相同。第一个参数只是没有标记。在本例中,如果希望第一个参数是
NSDictionary
,可以将其更改为:
RCT\u EXPORT\u方法(startRecording:(NSDictionary*)params resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)