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



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

目前,我正试图用一个使用promise的更优雅的解决方案来取代目前使用EventEmitter的方法。

然而,我遇到了一些麻烦,因为我收到编译器/解释器的投诉,说我用错误数量的参数调用了我的方法:

ExceptionsManager.js:71 RecorderBridge.startRecording was called with 0 arguments but expects 1 arguments. If you haven't changed this method yourself, this usually means that your versions of the native code and JavaScript code are out of sync. Updating both should make this error go away.

然而,我实际上没有任何争论,除了编译器/解释器不应该抱怨的解析器和拒绝器。

我的代码如下:

Recorder.js

...
startRecording = () => {
RecorderNative.startRecording();
};
...

RecorderNativeModule.js

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)

相关内容

最新更新