但我注意到,每当我从另一个方法调用它时,我的桥变量都是零。我相信这是因为只有在从 javascript 调用桥接方法时才会设置桥接。我已经尝试了从创建委托到创建 SingleTon 类的所有方法。以上都不起作用,我不明白为什么它只能在我从 Javascript 调用的方法中使用。这是我的班级
Helper.h
#import "RCTBridge.h"
#import "AppDelegate.h"
#import "RCTEventEmitter.h"
@interface Helper : RCTEventEmitter <RCTBridgeModule>
-(void) auth;
@end
这是我的 .m 文件:
助手.m
#import "AppDelegate.h"
#import "Helper.h"
#import "RCTBridge.h"
#import "RCTEventDispatcher.h"
@implementation Helper
RCT_EXPORT_MODULE();
@synthesize bridge = _bridge;
- (NSArray<NSString *> *)supportedEvents {
return @[@"SpotifyHelper"];
}
RCT_EXPORT_METHOD(auth)
{
[self.bridge.eventDispatcher sendDeviceEventWithName:@"SpotifyHelper" body:@{@"Login": @true}];
printf("Auth");
}
RCT_EXPORT_METHOD(play:(NSString *) uri first: id)
{
AppDelegate *appDelegate = [[AppDelegate alloc] init];
[appDelegate play:uri second:id];
}
@end
我从委托内部调用该方法,如下所示:
[[AppDelegate alloc] init] auth]
这就是我认为它没有初始化的原因。我不确定如何使 RCTBridge 变量不为零。有什么帮助吗?
问题就在这里:
[[AppDelegate alloc] init] auth]
当你使用宏时RCT_EXPORT_MODULE()
React-Native 将为您实例化该类,以及任何后续的alloc/init
s 将创建与原始实例无关的新实例。该桥不会在这些新实例中实例化。
您可以通过使用 NSNotifications 来解决您的问题。
助手.h:
#import "RCTEventEmitter.h"
@interface Helper : RCTEventEmitter
+ (void)emitEventWithName:(NSString *)name andPayload:(NSDictionary *)payload;
@end
助手.m:
#import "Helper.h"
@implementation Helper
RCT_EXPORT_MODULE();
- (NSArray<NSString *> *)supportedEvents {
return @[@"SpotifyHelper"];
}
- (void)startObserving
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(emitEventInternal:)
name:@"event-emitted"
object:nil];
}
- (void)stopObserving
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)emitEventInternal:(NSNotification *)notification
{
[self sendEventWithName:@"SpotifyHelper"
body:notification.userInfo];
}
+ (void)emitEventWithName:(NSString *)name andPayload:(NSDictionary *)payload
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"event-emitted"
object:self
userInfo:payload];
}
// Remaining methods
@end
这里有一个很长的讨论线程:可以使用什么方法将事件从本机模块发送到 JS https://github.com/facebook/react-native/issues/8714
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)