public async showLoading(options?: LoadingOptions) {
this.loadingPrefab = await LoaderMgr.loadPrefab(RES_PATH.common.prefab.Loading);
if (!this.loadingPrefab) {
console.error(“Loading prefab is not loaded yet.”);
return;
}
const { title } = options || {};
// this.hideLoading();
// 实例化 Modal 预制体
this.loadingPrefabTem = instantiate(this.loadingPrefab);
// 获取 Canvas 节点作为父节点
const canvas:Node = director.getScene().getComponentInChildren(Canvas).node;
if(canvas) {
if(this.loadingPrefabTem) {
console.log(">>> -- ",(this.loadingPrefabTem instanceof Node),director.getScene().name)
if(this.loadingPrefabTem.parent) {
console.log("有父对象了")
this.loadingPrefabTem.removeFromParent()
} else {
console.log("还没有父对象")
}
canvas.addChild(this.loadingPrefabTem);
} else {
console.log(" this.loadingPrefabTem 有问题")
}
} else {
console.log("没有找到Canvas")
}
console.log("Popup: 66666666666666")
}
以上这个方法中,高用的时候 ,从头到为都能打印,最后console.log(“Popup: 66666666666666”)这一行都没有问题,但是发apk以后,
canvas.addChild(this.loadingPrefabTem); 这一行一直报错,
canvas是正常的,
this.loadingPrefabTem也是正常中的,都是正常的,
在web下一点问题都没有,所有的实便都是正常正的。
我在Login场景中,点击登陆的时候 ,调用一下这个Loading, 其它什么都不做,就是调用 一下这个Loading显示一下,看看效果,现在就一直报错,
Login是一个场景 ,没有放在bundle中,
this.loadingPrefab = await LoaderMgr.loadPrefab(RES_PATH.common.prefab.Loading);
这个Loading是放在公共(common)的bundle中的,游戏刚运行的时候 ,就初始化加载了common这个bunlde, 在要显示Loading的时候 ,我从common这个bundle中去加载得到Loading这个prefab,
以上的所有东西,都是正常,也没有被释放,都是正常的对象,
最后就是在canvas.addChild(this.loadingPrefabTem); 一直报错,在androind的模拟器上,一直报错,web上没有任何问题,报错的错我就不贴出来了,都是混淆以后的报错,无法看,
以下是AI给的结果:
在 JSB 环境(V8 原生引擎)下, Prefab 和 Node 的 native 对象存在严格的生命周期和归属检查,主要影响:
跨 bundle 的资源/节点引用严格检查
*** 例如: loadingPrefab 可能是从 common bundle 加载, Canvas 是主场景 bundle 加载,导致 native 内部不允许 canvas.addChild(prefabInstance) 。**
*** 在浏览器上没问题,但 JSB 原生严格。**
热更新/释放后缓存对象失效
*** 即使 isValid 为 true,但 prefab 的内部 native 资源可能“残缺”或处于无效 native 状态(这类状态在 JSB 下很隐蔽)。**
问题到底出在哪里,希望大家给能说一下吗,我到底哪里错了, 还是官方的问题?


一般原生报错模拟器也会报错比较容易查看错误信息,android干扰信息太多不好查看