После перезагрузки приложения Bridge не устанавливается. Это, вероятно, потому что вы явно синтезировали мост в NativeModule - PullRequest
0 голосов
/ 04 октября 2019

Я сделал простой собственный модуль 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

и связанный заголовочный файл

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

@interface ASQGameCenter : RCTEventEmitter

@end

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...