RCTBatchedBridge.m 错误:无效的数据消息 - 所有长度必须为:%zd。React Native,iOS 模拟器
我正在使用
react-native-oauth
,并在尝试授权时收到此错误(见底部的红色图片)。我搜索了一下,只找到了这个
类似的未解答问题
。我查看了源代码,发现
错误发生的位置
在第 954 行,似乎是因为
moduleIDs.count
应该等于
methodIDs.count
和
paramsArrays.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’
。当我跳入堆栈跟踪时,我发现:
非常感谢您的帮助,谢谢。
所以对我来说,无论发生什么问题,都是
react-native-oauth
的设置问题,因为自从我回滚到我的代码没有其他依赖项的点(我还安装了 Firestack)并按照 react-native-oauth 的文档从头开始设置后,一切都已修复。我意识到 iOS/XCode 方面有一个步骤我错过了,因为当我最初尝试时找不到该文件,所以只是跳过了该步骤:
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.
我收到的错误与此相差几个步骤,但我确信它们以某种方式连接在一起。吸取的教训:不要试图一次做太多事情,也不要跳过必需的步骤。
当您向本机端发送一些错误的数据时,您将收到此错误。例如,如果您应该传递字符串,但您传递了一个对象。
请 console.log 您的
config
变量。
https://www.npmjs.com/package/react-native-oauth
我猜您向本机端发送了一些错误的数据