首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RCTBridge总是零

RCTBridge总是零
EN

Stack Overflow用户
提问于 2017-11-14 17:31:22
回答 4查看 842关注 0票数 3

我已经使用项目已经有一年多了。我有一个本机组件来桥接BLE堆栈到应用程序的React本机部分。最近,我升级到了XCode的9.1版,无法在iOS版本中使用React Native。RCTBridge总是nil,所以我永远不能使用eventDispatcher()。这是我的设置:

我有一个本机Swift组件,我通过一个bridgin头将它集成到应用程序中。原语如下:

代码语言:javascript
复制
BLEScanner.swift (This is the native component)
BluetoothModuleBridge.m
Module-Practive-Bridging-Header.h (The bridging header)

来自每个文件的相关代码片段:

BLEScanner.swift

代码语言:javascript
复制
import Foundation

@objc(BLEScanner)
class BLEScanner: NSObject {

  //....

  var bridge: RCTBridge!  // THIS IS ALWAYS NIL

  //....

  @objc func requestBluetoothState() -> Void {
    print("REQUEST BLE STATE")
    let ret = [
      "enabled" : true
    ]

    //THIS LINE WILL FAIL BECAUSE bridge IS NIL
    self.bridge.eventDispatcher().sendDeviceEvent(withName: "BluetoothStateEvent", body: ret)
  }

}

BluetoothModuleBridge.m

代码语言:javascript
复制
#import <React/RCTBridgeModule.h>


@interface RCT_EXTERN_MODULE(BLEScanner, NSObject)

RCT_EXTERN_METHOD(requestBluetoothState)

@end

Module-Practive-Bridging-Header.h

代码语言:javascript
复制
// BluetoothModule-Bridging-Header.h
#import <React/RCTBridge.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTEventDispatcher.h>

#import <React/RCTRootView.h>
#import <React/RCTUtils.h>
#import <React/RCTConvert.h>

#import "AppDelegate.h"
#import "BugsnagReactNative/BugsnagReactNative.h"

#import "nokeLockSDK.h"
#import "nokeServerSDK.h"
#import "TI_aes_128.h"

我已经尝试过的

  • 更新的React本机从0.36到0.50.3
  • 尝试在多个设备上运行
  • 在较早版本的XCode上试用
  • 试着在不同的机器上编译
  • 与类似的应用程序相比,该应用程序可以工作并使用相同的设计。

我很困惑为什么RCTBridge会以零的身份回归。我觉得奇怪的是,XCode更新会导致这种情况,然而,这是唯一的改变。

在调试这个问题时,有人能为我指出正确的方向吗?

我使用的是XCode 9.1并对Native0.50.3做出反应

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-11-17 06:54:48

你有自己的初始方法吗?如果是这样的话,试着移除它。经过我的测试,它没有问题。

推荐应用于Subclass RCTEventEmitter instead

票数 1
EN

Stack Overflow用户

发布于 2019-03-21 19:11:57

您不必对RCTEventEmitter进行子类分类。只需添加@objc属性即可。所以变量应该是@objc var bridge: RCTBridge!

票数 2
EN

Stack Overflow用户

发布于 2017-11-17 02:01:43

如果您升级到9.1,同时也响应到本机从30.x到50.x,您可能会有错误的导入,因为这是在40版本前后发生的变化。

它应该是

代码语言:javascript
复制
#import <React/RCTBridgeModule.h>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47291912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档