Ios 为什么React Native/Objective-C抱怨我用错误数量的参数调用我的方法?
我正在使用Objective-C和Swift开发React本机应用程序 目前,我正试图用一个使用承诺的更优雅的解决方案取代当前使用EventEmitter的方法 但是,我遇到了一些问题,因为编译器/解释器抱怨我使用错误数量的参数调用我的方法: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代码版本不同步。更新这两个选项将消除此错误
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)