3

我最近从 1.24 更新到ReactNativeControllers 2.03。我还将 RN 更新为 0.25。我正在使用一个只添加一个 Podspec 文件的叉子。在整理出 RN 中的所有导入更改后,我现在被这个错误难住了:

(另见https://github.com/wix/react-native-controllers/issues/59

RCCManager.setRootController 使用 3 个参数调用,但需要 2 个参数。如果您自己没有更改此方法,这通常意味着您的本机代码和 JavaScript 代码的版本不同步。更新两者应该会使此错误消失。

有问题的代码:

RCCManagerModule.m

setRootController:(NSDictionary*)layout animationType:(NSString*)animationType globalProps:(NSDictionary*)globalProps)

并在index.js

ControllerRegistry: {
    registerController: function (appKey, getControllerFunc) {
      _controllerRegistry[appKey] = getControllerFunc();
    },
    setRootController: function (appKey, animationType = 'none', passProps = {}) {
      var controller = _controllerRegistry[appKey];
      if (controller === undefined) return;
      var layout = controller.render();
      _validateDrawerProps(layout);
      RCCManager.setRootController(layout, animationType, passProps);
    }
  },

很明显,两者都有 3 个参数。

我已经杀死并重新启动了打包程序。我已经清理了 Xcode 项目,包括派生数据,并删除了 watchman 缓存watchman watch-del-all。我已经删除了我的node_modules文件夹,完成npm installpod install.

我已经重建了 Xcode 项目。仍然没有运气。我不知道如何进一步调试。

编辑:我还尝试清理 pod 缓存,更新为 Cocoapods 1.01 ...

我有一种感觉,这里的某个地方可能有一条红鲱鱼。作为参考,我的完整跟踪如下所示:

2016-06-10 14:15:18.179 [warn][tid:com.facebook.React.JavaScript] Warning: ReactNative.Component is deprecated. Use React.Component from the "react" package instead.
2016-06-10 14:15:18.239 JustTuner[7523:185768] Launching Couchbase Lite...
2016-06-10 14:15:19.048 JustTuner[7523:185768] Couchbase Lite url = http://adamwilsonsMBP.lan:5984/
2016-06-10 14:15:19.050 JustTuner[7523:185768] Launching Couchbase Lite...
2016-06-10 14:15:19.058 JustTuner[7523:185768] Couchbase Lite url = http://adamwilsonsMBP.lan:5984/
2016-06-10 14:15:19.538 [error][tid:main][RCTModuleMethod.m:456] RCCManager.setRootController was called with 3 arguments, but expects 2.                   If you haven't changed this method yourself, this usually means that                   your versions of the native code and JavaScript code are out of sync.                   Updating both should make this error go away.
4

3 回答 3

5

在花了很多时间试图解决这个问题后,我libReactNativeControllers.a发现build/Products/Debug-iphonesimulator.

删除libReactNativeControllers.a和重建项目解决了这个问题。

似乎 Pod 静态库现在被保存在它们各自的文件夹中,例如build/Products/Debug-iphonesimulator/ReactNativeControllers/libReactNativeControllers.a

我的猜测是最近的构建将静态库保存在子文件夹中,但链接器正在选择过时的库。任何人都知道为什么这可能最近发生了变化?

于 2016-06-11T10:46:44.463 回答
0

如果它发生在 react-native iOS 中,请尝试在 XCode 中清理和重建解决方案。

于 2019-05-01T20:39:14.577 回答
0

使用重置缓存重新启动 Metro 对我有用:

react-native start --reset-cache

或者

npm start -- --reset-cache

于 2021-05-26T14:30:36.050 回答