Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 方法不是公认的目标c方法_Ios_Objective C_Swift_React Native_React Native Native Module - Fatal编程技术网

Ios 方法不是公认的目标c方法

Ios 方法不是公认的目标c方法,ios,objective-c,swift,react-native,react-native-native-module,Ios,Objective C,Swift,React Native,React Native Native Module,关于同一个问题,人们问了很多问题,但没有一个能解决我的错误 这是我的目标c文件 #import <Foundation/Foundation.h> #import <React/RCTBridgeModule.h> #import <UIKit/UIKit.h> @interface RCT_EXTERN_MODULE(LanguageTranslationModule, NSObject) RCT_EXTERN_METHOD(callbackMetho

关于同一个问题,人们问了很多问题,但没有一个能解决我的错误

这是我的目标c文件

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import <UIKit/UIKit.h>

@interface RCT_EXTERN_MODULE(LanguageTranslationModule, NSObject)


RCT_EXTERN_METHOD(callbackMethod:(NSString*)englishText (RCTResponseSenderBlock)callback)

@end
这是我从React Native发出的JS调用

LanguageTranslationModule.callbackMethod(englishText, (err, r) => {
        if (!err) {
          setProgress(false);
          setMarathiText(r.text.toString());
        } else {
          setProgress(false);
          setMarathiText(err);
        }
      });
下面是我的翻译文本方法

func translateText(msg: String) {

    let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: .mr)
    let englishMarathiTranslator = NaturalLanguage.naturalLanguage().translator(options: options)

    let conditions = ModelDownloadConditions(
      allowsCellularAccess: false,
      allowsBackgroundDownloading: true
    )

    englishMarathiTranslator.downloadModelIfNeeded(with: conditions) {error in
      guard error == nil else { return }
      englishMarathiTranslator.translate(msg) { (translatedText, error) in
        guard error == nil, let translatedText = translatedText else { return }
        let resultsDict = [
          "text" : translatedText
        ];
        self.resultCallback([NSNull() ,resultsDict])
      }
    }
  }

我在swift文件中的第一个参数中添加了下划线,因为这是解决堆栈上其他问题的大多数方法,并且下划线和实际变量名之间有空格。如果我从所有文件中删除englishText变量,并将该文本硬编码到swift文件中,那么我的函数工作正常。当然,然后我必须在回调变量中添加下划线,因此我这边没有逻辑错误

我假设错误出现在问题的标题中。您的Swift方法的签名似乎与Objective C接口中声明的签名不匹配

尝试向声明中的第二个参数添加参数标签

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import <UIKit/UIKit.h>

@interface RCT_EXTERN_MODULE(LanguageTranslationModule, NSObject)


RCT_EXTERN_METHOD(callbackMethod:(NSString*)englishText callback:(RCTResponseSenderBlock)callback)
//                                                      ^^^^^^^^

@end
火柴

@objc func callbackMethod(_ englishText: String, callback: @escaping RCTResponseSenderBlock) -> Void
而你原来的变种

RCT_EXTERN_METHOD(callbackMethod:(NSString*)englishText (RCTResponseSenderBlock)callback)
相配

@objc func callbackMethod(_ englishText: String, _ callback: @escaping RCTResponseSenderBlock) -> Void

您不需要在swift方法中调用callback吗?如果你不调用,你的js方法就不会被触发。@ibrahimyilmaz我已经调用过了。查看swift code
resultCallback=callback
这里您只需将其分配给另一个变量。你在哪里调用过?你需要像
callback([NSNull(),[“success”:true]])
@ibrahimyilmaz那样调用。我在translateText方法内部调用了该代码,该方法在callbackMethod内部调用。再次检查我的代码
RCT_EXTERN_METHOD(callbackMethod:(NSString*)englishText (RCTResponseSenderBlock)callback)
@objc func callbackMethod(_ englishText: String, _ callback: @escaping RCTResponseSenderBlock) -> Void