我已经使用项目已经有一年多了。我有一个本机组件来桥接BLE堆栈到应用程序的React本机部分。最近,我升级到了XCode的9.1版,无法在iOS版本中使用React Native。RCTBridge总是nil,所以我永远不能使用eventDispatcher()。这是我的设置:
我有一个本机Swift组件,我通过一个bridgin头将它集成到应用程序中。原语如下:
BLEScanner.swift (This is the native component)
BluetoothModuleBridge.m
Module-Practive-Bridging-Header.h (The bridging header)来自每个文件的相关代码片段:
BLEScanner.swift
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
#import <React/RCTBridgeModule.h>
@interface RCT_EXTERN_MODULE(BLEScanner, NSObject)
RCT_EXTERN_METHOD(requestBluetoothState)
@endModule-Practive-Bridging-Header.h
// 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"我已经尝试过的
我很困惑为什么RCTBridge会以零的身份回归。我觉得奇怪的是,XCode更新会导致这种情况,然而,这是唯一的改变。
在调试这个问题时,有人能为我指出正确的方向吗?
我使用的是XCode 9.1并对Native0.50.3做出反应
发布于 2017-11-17 06:54:48
你有自己的初始方法吗?如果是这样的话,试着移除它。经过我的测试,它没有问题。
推荐应用于Subclass RCTEventEmitter instead。
发布于 2019-03-21 19:11:57
您不必对RCTEventEmitter进行子类分类。只需添加@objc属性即可。所以变量应该是@objc var bridge: RCTBridge!
发布于 2017-11-17 02:01:43
如果您升级到9.1,同时也响应到本机从30.x到50.x,您可能会有错误的导入,因为这是在40版本前后发生的变化。
它应该是
#import <React/RCTBridgeModule.h>https://stackoverflow.com/questions/47291912
复制相似问题