【问题标题】:RCTBatchedBridge.m Error: Invalid data message - all must be length:%zd. React Native, iOS simulatorRCTBatchedBridge.m 错误:无效数据消息 - 都必须是长度:%zd。 React Native,iOS 模拟器
【发布时间】:2023-09-17 05:57:01
【问题描述】:

我正在使用react-native-oauth 并在尝试授权时收到此错误(见底部的红色图像)。我搜索并发现只有这个similar unanswered question。我查看了源代码并在第 954 行找到了where the error is raised,这似乎是因为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);

所以,仍然在the source 中,我查找这些对象并找到它们在上面定义的第 943-945 行,它们正在使用 RCTConvert,其函数“......都接受 JSON 值作为输入并映射它到原生的 Objective-C 类型或类。” - React's docs

所以这似乎是一个与转译和/或网络相关的错误。但是我在这些领域的知识基本上是 0,我觉得我在调查时遇到了障碍,想知道是否有人对前进有任何想法。刚接触 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: undefined is not an object (evaluating 'fn')

编辑:

当我尝试提醒config 对象时,我收到一个关于无法将其子对象字符串化的错误。

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

我正在深入研究错误,这似乎是来自NativeModules.OAuthManager 的承诺/回调相关问题。捕获的错误是:TypeError: Cannot read property 'authorize' of undefined。当我跳入堆栈跟踪时,我发现:

非常感谢任何帮助,谢谢。

【问题讨论】:

    标签: ios objective-c oauth react-native bridge


    【解决方案1】:

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

    请 console.log 你的 config 变量。

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

    我猜你向原生端发送了一些错误的数据

    【讨论】:

    • 另外请确保您正确链接库
    【解决方案2】:

    所以对我来说,出现任何问题都是react-native-oauth 的设置问题,因为自从我回滚到我的代码没有其他依赖项(我也安装了 Firestack)并从按照 react-native-oauth 的文档再次从头开始。我意识到 iOS/XCode 方面有一个步骤我错过了,因为当我最初尝试时找不到文件,所以跳过了这一步:

    来自react-native-oauth readme

    接下来,导航到项目设置的相邻“Build Phases”部分,找到“Link Binary with Library”下拉菜单,展开它,然后单击“+”将 libOAuthManager.a 添加到列表中。

    我得到的错误是从这里删除了几个步骤,但我确定以某种方式连接。经验教训:不要试图一次做太多事情,也不要跳过必要的步骤。

    【讨论】: