【问题标题】:React native - connection has no connection handler error meaning?React native - 连接没有连接处理程序错误含义?
【发布时间】:2017-05-20 03:40:32
【问题描述】:

我创建了一个新的 react 项目,当我从 xcode 在 iOS 上运行它时,控制台给了我这个:

2017-05-19 23:25:34.119 [info][tid:main][RCTBatchedBridge.m:77] Initializing <RCTBatchedBridge: 0x6100001a6c80> (parent: <RCTBridge: 0x6100000c46e0>, executor: RCTJSCExecutor)
2017-05-19 23:25:51.287 [info][tid:main][RCTRootView.m:295] Running application test ({
    initialProps =     {
    };
    rootTag = 1;
})
2017-05-19 23:25:51.289 [info][tid:com.facebook.react.JavaScript] Running application "test" with appParams: {"rootTag":1,"initialProps":{}}. __DEV__ === true, development-level warning are ON, performance optimizations are OFF
2017-05-19 23:25:51.299771-0400 test[21948:1121429] [] nw_connection_get_connected_socket_block_invoke 3 Connection has no connected handler
2017-05-19 23:25:53.335282-0400 test[21948:1121426] [] nw_connection_get_connected_socket_block_invoke 4 Connection has no connected handler
2017-05-19 23:25:55.349190-0400 test[21948:1120112] [] nw_connection_get_connected_socket_block_invoke 5 Connection has no connected handler

2017-05-19 23:25:51.299771-0400 test[21948:1121429] [] nw_connection_get_connected_socket_block_invoke 3 Connection has no connected handler 这些行是什么意思,我该如何解决这个问题?

当我尝试在我的应用程序中使用 fetch 并发现它不起作用时,我首先注意到了这一点。我在控制台中找到了这些消息,后来发现这些消息都发生在我的所有应用程序中,所以我认为这意味着这是我的配置问题?

我创建了一个新的测试程序来测试导致这种情况的原因,并发现它发生在一个全新的项目中。下面是我的代码,它生成了上面的日志输出:

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View
} from 'react-native';

export default class test extends Component {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}>
          Welcome to React Native!
        </Text>
        <Text style={styles.instructions}>
          To get started, edit index.ios.js
        </Text>
        <Text style={styles.instructions}>
          Press Cmd+R to reload,{'\n'}
          Cmd+D or shake for dev menu
        </Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

AppRegistry.registerComponent('test', () => test);

【问题讨论】:

    标签: ios react-native connection


    【解决方案1】:

    试试下面的流程

    Xcode 菜单 -> 产品 -> 编辑方案...

    环境变量 -> 添加 -> 名称:“OS_ACTIVITY_MODE”,值:“禁用”

    再次运行您的应用

    【讨论】:

    • 谢谢!这行得通,您介意解释一下为什么行得通吗?
    • 这不是解决方案,这是隐藏错误。尚未找到真正的修复:github.com/facebook/react-native/issues/10027
    • 实际上,我发现我的 iPhone 应用程序,多年来一直运行良好,突然无法与我的网络服务对话。添加此环境变量并重新构建/部署应用程序修复了错误......所以,对我来说,这不仅仅是隐藏一些错误消息。
    • 这将在使用真实设备时隐藏您的 NSLog。在真实设备上进行测试时,将“禁用”值更改为空字符串。见stackoverflow.com/a/41828707/672989
    • 我仍然收到错误消息。即使我开始使用 react-devtools
    【解决方案2】:

    我想出了解决办法:

    关闭详细的操作系统活动模式

    1. 从 xcode 菜单,项目 -> 方案 -> 编辑方案。
    2. 然后选择左侧的Run,然后选择右侧的Arguments 选项卡。
    3. Environment Variables 中添加名称OS_ACTIVITY_MODE 和值disable

    或见下图。

    注意:图片归功于Ramkrishna Sharma

    【讨论】:

      【解决方案3】:

      这个错误很可能来自于 react-native 内置的 websocket 连接到 react-devtools。如果您在调试时没有运行 react-devtools,那么您将收到此错误,并且它还会在桥上发送一堆消息,抱怨无法打开 websocket(如果您正在使用,您只会看到这些错误类似rn-snoopy)。

      安装并打开 react-devtools 后,错误就会停止。请参阅以下说明以了​​解如何操作: https://github.com/facebook/react-devtools/blob/master/packages/react-devtools/README.md

      【讨论】:

      • 我在 iPad 上运行 React Native。我看不到如何告诉它连接到我的开发机器上的 react-devtools - 想法?
      • 所以你是在暗示运行 react native 需要 react-devtools ?这很奇怪......
      【解决方案4】:

      为了禁用 websocket 流,我做了以下操作:

      • 在 xcode: Libraries/React.xcodeproj/React/Inspector/RCTInspectorPackagerConnection.m 中:找到 - (void)connect { 并在其后面添加 return;

      • 在 node_modules/react-native/Libraries/Core/Devtools/setupDevtools.js 中:将 if (__DEV__) 替换为 if (false)

      这很丑,但比 OS_ACTIVITY 解决方案好很多,因为它不会隐藏或阻止任何其他调试工具。

      【讨论】:

        【解决方案5】:

        在我的情况下,这是由于防火墙应用程序 (Little Snitch) 在从 react-native 应用程序运行时从不请求访问。适合我的步骤:

        • 在模拟器中打开 Safari 浏览器
        • 访问 google.com 或任何域
        • 确保它打开了页面。它会要求访问等
        • 在模拟器中重启应用
        • 重新开始记录react-native log-ios

        这应该会有所帮助。

        【讨论】:

          【解决方案6】:

          我遇到了同样的问题,我的应用程序的启动也因此而严重延迟。对我的实际修复是详细的here,但我会重写它以防链接中断:

          1. 打开 Xcode
          2. 点击顶部栏的Product
          3. 点击Scheme,向下滚动到Edit Scheme
          4. 选择左侧栏上的Run,顶部选项卡上的Info
          5. Build ConfigurationDebug 更改为 Release

          现在应用程序不仅不再有错误,而且启动速度更快。其他“修复”只是隐藏错误。

          【讨论】:

          • 这根本没有帮助,您每次都在为发布而构建只是为了避免出现此类错误?没有意义,你不能再调试了。不是一个好的答案。
          猜你喜欢
          • 2015-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-11
          • 2012-05-01
          • 1970-01-01
          相关资源
          最近更新 更多