React native 不是公认的客观 C 方法

Posted

技术标签:

【中文标题】React native 不是公认的客观 C 方法【英文标题】:React native not a recognised objective C method 【发布时间】:2020-07-27 11:30:01 【问题描述】:

我正在尝试桥接本机模块的回调以响应本机。我也试过这个Got "is not a recognized Objective-C method" when bridging Swift to React-Native

我也为我的第一个参数添加了下划线

以下是我的快速代码

import Foundation
import LocalAuthentication

@objc(FingerPrintModule)
class FingerPrintModule: NSObject 
  
  var resultCallback: RCTResponseSenderBlock!
  
  @objc func authenticateLocallyForios(_ callback: @escaping RCTResponseSenderBlock) -> Void 
    resultCallback = callback
    useLocalAuthentication()
  
  
  private func useLocalAuthentication()
    //Business logic
  
  

我也为我的swift 文件创建了objective c 文件

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

@interface RCT_EXTERN_MODULE(FingerPrintModule, NSObject)


RCT_EXTERN_METHOD(authenticateLocallyForIos: callback:(RCTResponseSenderBlock)callback)
 
@end

当我从 react native 调用时,我收到错误消息,提示无法识别 objective c 方法

我的 React Native 代码

import  NativeModules,
  Platform,
 from "react-native";
const  FingerPrintModule  = NativeModules;

在按钮按下时调用

FingerPrintModule.authenticateLocallyForIos((err, result) => 
        if (!err) 
          Alert.alert(result.toString());
         else 
          Alert.alert(err);
        
      );

【问题讨论】:

你能在调用这个方法的地方添加 React 端代码吗? @Daljeet 立即查看 【参考方案1】:

在您的反应代码中执行如下操作:

const yourModule = NativeModules.FingerPrintModule;

然后调用如下方法:

yourModule.authenticateLocallyForIos((err, result) => 
        if (!err) 
          Alert.alert(result.toString());
         else 
          Alert.alert(err);
        
      );

【讨论】:

@Dalijeet 我尝试了你的方法并得到同样的错误。实际上我的方法是正确的,因为它适用于 android,但对于 iOS,它会出错。我的swift或objective c文件的方法定义有错误 你可以尝试创建简单的方法 RCT_EXTERN_METHOD(sayHello) 没有任何参数并在其中打印你好【参考方案2】:

我必须将我的objective c 代码更改为如下

RCT_EXTERN_METHOD(authenticateLocallyForIos:(RCTResponseSenderBlock)callback)

【讨论】:

以上是关于React native 不是公认的客观 C 方法的主要内容,如果未能解决你的问题,请参考以下文章

react-native 中的 navigator.geolocation.getCurrentPosition 是不是与本地地理定位方法一样准确?

注册通知操作不是 React Native 中的函数

在 React / React Native 中不是父/子的类之间共享和更新变量

scrollToLocatoin 不是函数:react-native-swipe-list-view

在React Native中创建android本机模块时,“undefined不是函数”

react native 生命周期详解