首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RCTBridge需要dispatch_sync来加载RNGestureHandlerModule。这可能会导致死锁

RCTBridge需要dispatch_sync来加载RNGestureHandlerModule。这可能会导致死锁
EN

Stack Overflow用户
提问于 2022-03-25 19:25:13
回答 1查看 402关注 0票数 0

在安装了其他软件包所需的"react-native-reanimated": "^2.5.0"包后,我开始收到这个警告(我的应用程序也支持web平台)。

当然,我向goole询问了同样的问题,例如this。我按照答案中的所有说明修改了AppDelegate.m,如下所示:

代码语言:javascript
复制
#import "AppDelegate.h"

// Fix 1
#if RCT_DEV
#import <React/RCTDevLoadingView.h>
#endif

#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>

#ifdef FB_SONARKIT_ENABLED
#import <FlipperKit/FlipperClient.h>
#import <FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.h>
#import <FlipperKitUserDefaultsPlugin/FKUserDefaultsPlugin.h>
#import <FlipperKitNetworkPlugin/FlipperKitNetworkPlugin.h>
#import <SKIOSNetworkPlugin/SKIOSNetworkAdapter.h>
#import <FlipperKitReactPlugin/FlipperKitReactPlugin.h>

static void InitializeFlipper(UIApplication *application) {
  FlipperClient *Letopeace = [FlipperClient sharedClient];
  SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults];
  [Letopeace addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]];
  [Letopeace addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]];
  [Letopeace addPlugin:[FlipperKitReactPlugin new]];
  [Letopeace addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]];
  [Letopeace start];
}
#endif

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
#ifdef FB_SONARKIT_ENABLED
  InitializeFlipper(application);
#endif

  RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
// Fix 2
#if RCT_DEV
  [bridge moduleForClass:[RCTDevLoadingView class]];
#endif
  RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
                                                   moduleName:@"Letopeace"
                                            initialProperties:nil];

  if (@available(iOS 13.0, *)) {
      rootView.backgroundColor = [UIColor systemBackgroundColor];
  } else {
      rootView.backgroundColor = [UIColor whiteColor];
  }

  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  UIViewController *rootViewController = [UIViewController new];
  rootViewController.view = rootView;
  self.window.rootViewController = rootViewController;
  [self.window makeKeyAndVisible];
  return YES;
}

- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
  return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}

@end

但是,它不起作用,我仍然收到警告:

代码语言:javascript
复制
RCTBridge required dispatch_sync to load RNGestureHandlerModule. This may lead to deadlocks

问题在哪里?

EN

回答 1

Stack Overflow用户

发布于 2022-04-11 11:09:21

此问题与RNGH相关,首先升级RNGH,然后将以下代码传递给App.js

代码语言:javascript
复制
import 'react-native-gesture-handler';
import {GestureHandlerRootView} from 'react-native-gesture-handler';
import React from 'react';




const App = () => {
  
  return (
    <GestureHandlerRootView style={{flex: 1}}>
      <NavigationContainer theme={theme}>
        <AuthTokenProvider>
          <Stack.Navigator
            screenOptions={{
              headerShown: false,
            }}
            initialRouteName="SplashScreen">
            <Stack.Screen name="SplashScreen" component={SplashScreen} />
            <Stack.Screen name="Flow" component={Flow} />
          </Stack.Navigator>
        </AuthTokenProvider>
      </NavigationContainer>
    </GestureHandlerRootView>
  );
};

export default App;

谢谢

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71622146

复制
相关文章

相似问题

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