重新加载应用程序后,桥未设置。这可能是因为您已经在 NativeModule 中显式地合成了桥接器

Ilj*_*lja 5 objective-c ios react-native

我已经为游戏中心身份验证制作了简单的本机 ios 模块,它运行良好,直到我cmd + r在 ios 模拟器中重新加载我的应用程序。在我刷新我的应用程序并且这个事件发射器被称为我的应用程序崩溃后,出现以下错误。

桥未设置。这可能是因为您已经在 ASQGameCenter 中明确合成了桥接器,即使它是从 RCTEventEmitter 继承的。

这是模块

#import "ASQGameCenter.h"

@implementation ASQGameCenter
/**
 * Globals
 */
NSString *eventName = @"ASQGameCenter:event";
BOOL isSubscribed = NO;

/**
 * Utalise main queue
 */
- (dispatch_queue_t)methodQueue {
  return dispatch_get_main_queue();
}

RCT_EXPORT_MODULE();

/**
 * Declare events
 */
- (NSArray<NSString *> *)supportedEvents {
  return @[ eventName ];
}

/**
 * Authenticate user
 */
RCT_EXPORT_METHOD(authenticate
                  : (RCTPromiseResolveBlock)resolve rejecter
                  : (RCTPromiseRejectBlock)reject) {
  if (!isSubscribed) {
    isSubscribed = YES;
    [self subscribe];
  }

  resolve(@"ASQGameCenter:subscribe");
}

/**
 * Subscribe to auth changes
 */
- (void)subscribe {
  __weak GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
  UIViewController *rnView = [UIApplication sharedApplication].keyWindow.rootViewController;

  localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error) {
  if (error) {
       [self sendEventWithName:eventName body:@{@"error" : error.description}];
  }
    else if (viewController != nil) {
      [rnView presentViewController:viewController animated:YES completion:nil];
    } else if (localPlayer.isAuthenticated) {
      [self sendEventWithName:eventName body:@{@"playerID" : localPlayer.playerID}];
    } else {
      [self sendEventWithName:eventName body:@{@"error" : error.description}];
    }
  };
}

@end

Run Code Online (Sandbox Code Playgroud)

以及相关的头文件

#import <React/RCTEventEmitter.h>
#import "GameKit/GameKit.h"

@interface ASQGameCenter : RCTEventEmitter

@end

Run Code Online (Sandbox Code Playgroud)