didi / Hummer

一套移动端高性能高可用的动态化跨端开发框架
https://hummer.didi.cn/
Apache License 2.0
1.31k stars 178 forks source link

iOS controller pop 后 app 崩溃 #421

Open liuhaijing-lab opened 1 year ago

liuhaijing-lab commented 1 year ago

描述

iOS controller pop 后 app 崩溃

Hummer version:

master branch

复现步骤

  1. 导出 tabbar 视图组件 2.组件中使用原生 UITabBarController 3.UITabBarController 管理多个 HMViewController 4.HMViewController 加载 js 资源 5.tabbar 所在控制器 pop 后 控制台输出 ‘HMJSContext 销毁’ 6.执行到 HMJSCExecutor.m 1315行 后崩溃

预期结果

组件正常销毁

样例代码、屏幕截图或者仓库链接

js 使用:

let tabBar = new TabBar()
tabBar.items = [{},{}]
this.appendChild(tabBar)

tabbar 视图组件关键代码:

HMJSContext *context = [HMJSGlobal.globalObject currentContext:self.hmContext];

NSURL *url = [NSURL URLWithString:urlString];
if (url.scheme.length == 0) {
    if (context) {
        url = [[NSURL alloc] initWithString:urlString relativeToURL:context.url];
        if (url.scheme.length == 0) {
            return;
        }
    } else {
        return;
    }
}

HMViewController *controller = [[HMViewController alloc] initWithURL:url.absoluteString params:@{}];
[self setTabBarItemImage:controller.tabBarItem imageSrc:imageSrc isSelectedImage:NO];
[self setTabBarItemImage:controller.tabBarItem imageSrc:selectedImageSrc isSelectedImage:YES];

崩溃的代码位置 image