You need to enable JavaScript to run this app. iOS应用点击登录按钮跳转首页时出现运行时异常与崩溃问题
优惠活动
大模型
产品
解决方案
定价
更多

iOS应用点击登录按钮跳转首页时出现运行时异常与崩溃问题

分步解决两类运行时异常

从日志顺序可以看到,你的问题分为先后独立的两类:第一类是不影响逻辑但会导致跳转失效的转场冲突警告,第二类是直接触发APP崩溃的CollectionView复用错误,两类问题分别处理即可。

1. 导航转场冲突警告处理

日志中出现的pushViewController:animated: called on <UINavigationController> while an existing transition or presentation is occurring警告,本质是导航控制器仍在执行上一次转场动画(比如登录点击后弹出的加载HUD、上一级页面的Dismiss动画未走完)时,你立刻触发了首页push操作,导致本次push被导航栈直接忽略,没有真正执行页面跳转——日志开头的Not Login提示就是这次push失效的直接表现。

  • 修正方式:所有涉及视图转场的操作,统一放到主队列下一轮runloop执行,确保上一次转场完全结束:
    // 替换登录成功回调里直接写的push代码
    DispatchQueue.main.async {
        guard let navController = self.navigationController else { return }
        let homeVC = HomeViewController()
        navController.pushViewController(homeVC, animated: true)
    }
    
  • 注意细节:必须等弹窗完全移除、转场结束后再触发页面跳转,不能在弹窗还在展示的状态下执行push。

2. CollectionView 崩溃问题处理

从崩溃栈可以直接定位根因:代码在HomeViewController的cellForItemAt代理方法中,用复用标识homeCollectionViewCell去取可复用Cell,但当前CollectionView从来没有注册过这个标识对应的Cell类、xib,也没有在Storyboard中绑定对应的原型Cell,直接触发了内部断言崩溃。
根据你的实现场景对应补全注册逻辑即可:

  • 纯代码实现的页面:在viewDidLoad方法中给CollectionView补注册代码
    // 纯代码自定义Cell的注册方式
    collectionView.register(HomeCollectionViewCell.self, forCellWithReuseIdentifier: "homeCollectionViewCell")
    // xib搭建自定义Cell的注册方式
    let cellNib = UINib(nibName: "HomeCollectionViewCell", bundle: nil)
    collectionView.register(cellNib, forCellWithReuseIdentifier: "homeCollectionViewCell")
    
  • Storyboard搭建的页面:
    • 找到首页对应的CollectionView原型Cell,在属性检查器中将Identifier设置为和代码完全一致的homeCollectionViewCell,注意大小写、拼写必须完全匹配
    • 确认原型Cell的所属类已经和自定义的HomeCollectionViewCell做了绑定
  • 校验方式:注册完成后,可在viewDidLoad末尾打印当前CollectionView已注册的复用标识列表,确认目标标识已经存在,避免拼写不一致的隐性问题。

内容的提问来源于stack exchange,提问作者Hamzi Mughal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 14:54:06