开发者问题收集

RCTBatchedBridge.m 错误:无效的数据消息 - 所有长度必须为:%zd。React Native,iOS 模拟器

2016-12-23
2228

我正在使用 react-native-oauth ,并在尝试授权时收到此错误(见底部的红色图片)。我搜索了一下,只找到了这个 类似的未解答问题 。我查看了源代码,发现 错误发生的位置 在第 954 行,似乎是因为 moduleIDs.count 应该等于 methodIDs.countparamsArrays.count :

  if (RCT_DEBUG && (moduleIDs.count != methodIDs.count || moduleIDs.count != paramsArrays.count)) {
RCTLogError(@"Invalid data message - all must be length: %zd", moduleIDs.count);

因此,仍然在 源代码 中,我查找这些对象并发现它们定义在上面的第 943-945 行,它们使用 RCTConvert,其函数“...都接受 JSON 值作为输入并将其映射到本机Objective-C 类型或类。" - React 的文档

所以这似乎是一个转译和/或网络相关的错误。但是我对这些领域基本上一无所知,觉得我遇到了调查的障碍,想知道是否有人对下一步有什么想法。作为 React Native 的新手,从未做过任何 Objective-C 帮不上忙。

此外,这是我生成错误的代码。

import OAuthManager from 'react-native-oauth';
import {
Alert
} from 'react-native'
var env = require('../environment.js')
const config =  {
  facebook: {
    client_id: env.getKey("FB_ID"),
    client_Secret: env.getKey("FB_SECRET")
  }
}
const manager = new OAuthManager('myAppName')
manager.configure(config);
exports.authWithFb = () => {
   manager.authorize('facebook')
     .then(resp => Alert.alert('response!' + resp))
     .catch(err => Alert.alert('error msg here: ' + err));
}

我猜这个未定义的错误与 RCTBridge 错误有关,但不确定。您可以在下面看到我何时提醒 manager.authorize 捕获的错误。 TypeError:未定义不是对象(评估“fn”)

在此处输入图像描述 此错误

编辑:

当我尝试提醒 config 对象时,出现无法将其子对象字符串化的错误。 在此处输入图片描述

在 chrome 调试器控制台中查看时,我收到“无法读取未定义的属性‘configureProvider’”,而 react-native-oauth 使用的是 configureProvider() ,因此看起来管理器设置不正确,所以也许我没有很好地链接库。已检查链接是否有效。

我深入研究了一下错误,这似乎是来自 NativeModules.OAuthManager 的 promise/callback 相关问题。捕获的错误是: TypeError:无法读取未定义的属性‘authorize’ 。当我跳入堆栈跟踪时,我发现: 在此处输入图像描述

非常感谢您的帮助,谢谢。

2个回答

所以对我来说,无论发生什么问题,都是 react-native-oauth 的设置问题,因为自从我回滚到我的代码没有其他依赖项的点(我还安装了 Firestack)并按照 react-native-oauth 的文档从头开始设置后,一切都已修复。我意识到 iOS/XCode 方面有一个步骤我错过了,因为当我最初尝试时找不到该文件,所以只是跳过了该步骤:

来自 react-native-oauth readme

Next, navigate to the neighboring "Build Phases" section of project settings, find the "Link Binary with Library" drop down, expand it, and click the "+" to add libOAuthManager.a to the list.

我收到的错误与此相差几个步骤,但我确信它们以某种方式连接在一起。吸取的教训:不要试图一次做太多事情,也不要跳过必需的步骤。

Tam Borine
2016-12-23

当您向本机端发送一些错误的数据时,您将收到此错误。例如,如果您应该传递字符串,但您传递了一个对象。

请 console.log 您的 config 变量。

https://www.npmjs.com/package/react-native-oauth

我猜您向本机端发送了一些错误的数据

Shahen Hovhannisyan
2016-12-23