Uncaught TypeError: Cannot read property '0' of null

  • Creator 版本: 3.5.2

  • 目标平台:Android

  • 首个报错:
    11-17 09:21:18.537 18747 18802 D jswrapper: JS: [ERROR]: (see stack) Uncaught TypeError: Cannot read property ‘0’ of null - [0]getRenderMaterial@src/cocos-js/cc.js:1
    11-17 09:21:18.537 18747 18802 D jswrapper: - [1]_activateMaterial@src/cocos-js/cc.js:1
    11-17 09:21:18.537 18747 18802 D jswrapper: - [2]_applySpriteSize@src/cocos-js/cc.js:1
    11-17 09:21:18.537 18747 18802 D jswrapper: - [3]_applySpriteFrame@src/cocos-js/cc.js:1
    11-17 09:21:18.537 18747 18802 D jswrapper: - [4]set spriteFrame@src/cocos-js/cc.js:1
    11-17 09:21:18.537 18747 18802 D jswrapper: - [5]anonymous@assets/main/index.js:55
    11-17 09:21:18.537 18747 18802 D jswrapper: - [6]anonymous@src/cocos-js/cc.js:1
    11-17 09:21:18.537 18747 18802 D jswrapper: - [7]create@src/cocos-js/cc.js:1
    11-17 09:21:18.537 18747 18802 D jswrapper: - [8]anonymous@src/cocos-js/cc.js:1
    11-17 09:21:18.537 18747 18802 D jswrapper: - [9]anonymous@src/cocos-js/cc.js:1
    11-17 09:21:18.537 18747 18802 D jswrapper: - [10]anonymous@src/cocos-js/cc.js:1
    11-17 09:21:18.537 18747 18802 D jswrapper: - [11]fireTimeout@jsb-adapter/jsb-builtin.js:635
    11-17 09:21:18.537 18747 18802 D jswrapper: - [12]tick@jsb-adapter/jsb-builtin.js:593
    11-17 09:21:18.537 18747 18802 E jswrapper: [ERROR] (/Applications/CocosCreator/Creator/3.5.2/CocosCreator.app/Contents/Resources/resources/3d/engine/native/cocos/bindings/jswrapper/v8/Object.cpp, 530): Invoking function (0xb400007bf002b1a0) failed!

这里的错误堆栈指向比较明显了,差看了一下3.5.2引擎的代码,最后指向的 getRenderMaterial 调用函数在这里。

没有明白为啥这里的 this._materialInstances 和 this._materials 都为 null ,什么情况下会把一个 protected 属性给重写为 null

这里的初步判断是由一个头像的常驻节点引起的。

比如说我有三个场景: Loading 、Match 、Game

在 Loading 场景下,挂载一个 默认头像的常驻节点,Loading 完成后,进入 Match / Game 场景后都可以使用这个常驻节点。

试着把常驻节点干掉,用别的方式实现,线上的错误量明显降低了。对于这类的错误异常,开发者真的是无从下手的定位,以及为啥会引起这样子的报错,就很难受