setSiblingIndex动态修改层级顺序总有几个报错

TypeError: undefined is not an object (evaluating ‘nextSibling._sgNode’)
报错如上
在web下没有问题,在模拟器下,每次都会有一到两个报错。

是在有layout约束节点下使用出现的

setcardIndex(card, v){
        this.handCardbox.addChild(card)
        let p = this._cardSort(v)
        try {
            card.setSiblingIndex(p)
        }catch (e) {
            console.log('排位错误:'+e)
        }
        // card.setLocalZOrder(p)
        // card.zIndex = this._cardSort(cardList[i])
    },

_cardSort(v){
        for(let i in this.usrCards){
            if(parseInt(v)<=parseInt(this.usrCards[i])){
                this.usrCards.splice(i,0,v)
                return i
            }
        }
        this.usrCards.push(v)
        return this.usrCards.length
    },

找到原因

‘’’

/**
* !#en Set the sibling index of this node.
* !#zh 设置节点同级索引。
* @method setSiblingIndex
* @param {Number} index
* @example
* node.setSiblingIndex(1);
*/

_setSiblingIndex (index) {
    if (!this.node._parent) {
        return;
    }
    var Deactivating = 1 << 8;
    if (this.node._parent._objFlags & Deactivating) {
        cc.errorID(3821);
        return;
    }
    var siblings = this.node._parent._children;
    index = index !== -1 ? index : siblings.length - 1;
    var oldIndex = siblings.indexOf(this.node);

    if (index !== oldIndex) {
        siblings.splice(oldIndex, 1);
        if (index < siblings.length) {
            siblings.splice(index, 0, this.node);
        }
        else {
            siblings.push(this.node);
        }
        this._onSiblingIndexChanged && this._onSiblingIndexChanged(index);
    }
},
_onSiblingIndexChanged (index) {
    // update rendering scene graph, sort them by arrivalOrder
    var parent = this.node._parent;
    var siblings = parent._children;
    var i = 0, len = siblings.length, sibling;
    if (CC_JSB) {
        if (cc.runtime) {
            for (; i < len; i++) {
                sibling = siblings[i]._sgNode;
                // Reset zorder to update their arrival order
                var zOrder = sibling.getLocalZOrder();
                sibling.setLocalZOrder(zOrder + 1);
                sibling.setLocalZOrder(zOrder);
            }
        }
        else {
                console.log(parent._sgNode)
                parent._sgNode.removeChild(this._sgNode, false);
            if (index + 1 < siblings.length) {
                var nextSibling = siblings[index + 1];
                parent._sgNode.insertChildBefore(this._sgNode, nextSibling._sgNode);
            }
            else {
                parent._sgNode.addChild(this._sgNode);
            }
        }
    }
    else {//无jsb环境
        for (; i < len; i++) {
            sibling = siblings[i]._sgNode;
            sibling._arrivalOrder = i;
            cc.eventManager._setDirtyForNode(sibling);
        }
        cc.renderer.childrenOrderDirty = true;
        parent._sgNode._reorderChildDirty = true;
        parent._delaySort();
    }
}

‘’’

cc.runtime 在模拟器里是判断不到的

‘’’

            for (; i < len; i++) {
                sibling = siblings[i]._sgNode;
                // Reset zorder to update their arrival order
                var zOrder = sibling.getLocalZOrder();
                sibling.setLocalZOrder(zOrder + 1);
                sibling.setLocalZOrder(zOrder);
            }
        }

‘’’
这段代码是有效的,照情况修改就可以了。