【问题标题】:Swift NativeModule for iOS is always null适用于 iOS 的 Swift NativeModule 始终为空
【发布时间】:2021-07-14 10:53:22
【问题描述】:

我正在使用 ReactNative 为 IOS 和 Android 构建一个移动应用程序。我还在使用 Swift 为 iOS 构建一个原生模块。但是当我从 JS 访问模块类时,它总是返回 null。

我使用以下代码创建了一个 WaterRowerBleManager.swift 文件。

import Foundation

@objc(WaterRowerBleManager)
class WaterRowerBleManager: NSObject {
  @objc
  func constantsToExpose() -> [AnyHashable : Any]! {
    return [
          "number": 123.9,
          "string": "foo",
          "boolean": true,
          "array": [1, 22.2, "33"],
          "object": ["a": 1, "b": 2]
        ]
  }
  
  @objc
  static func requiresMainQueueSetup() -> Bool {
     return true
  }
}

它还创建了一个带有“.h”扩展名的桥头文件。我已将文件原样保留。

然后我使用以下代码创建了一个 WaterRowerBleManager.m 文件。

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

@interface RCT_EXTERN_MODULE(WaterRowerBleManager, NSObject)
@end

从 ReactNative 中,从 App.js 访问模块,如下所示。

import { NativeModules } from 'react-native';
NativeModules.WaterRowerBleManager

NativeModules.WaterRowerBleManager 总是返回 null。我的代码有什么问题,我该如何解决?

【问题讨论】:

  • 您是否尝试再次安装该应用程序?
  • 嗨,是的,我也试过了。
  • 在WaterRowerBleManager-Bridging-Header.h文件中添加import语句了吗?
  • 我输入了这个 #import "React/RCTBridgeModule.h" 。我需要添加其他东西吗? @JigneshMayani?
  • 让你导出模块:RCT_EXPORT_MODULE

标签: ios swift react-native react-native-modules


【解决方案1】:

您需要创建Bridge文件并需要导出模块名称才能使用它。

在您的 WaterRowerBleManager.h 文件中

#import <React/RCTBridgeModule.h>

@interface WaterRowerBleManager : NSObject @结束

在您的 WaterRowerBleManager.m 文件中

RCT_EXPORT_MODULE(WaterRowerBleManager);

【讨论】:

  • 当我添加方法声明时,它抱怨缺少上下文。
【解决方案2】:

在这里遇到了同样的问题。发现主要原因是如果您没有在其中公开任何方法,ReactNative 将不会加载您的 NativeModule。所以解决方案是在.m中封装一些方法并重新构建/重新加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-06
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2014-05-15
    • 2017-04-16
    • 1970-01-01
    相关资源
    最近更新 更多