You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS13+ Storyboard依赖注入与场景自定义对象兼容问题咨询

问题原因与解决方案

兼容性结论

iOS 13引入的基于@IBSegueAction的Storyboard依赖注入能力,完全兼容场景内添加的三类自定义对象:自定义类Object、自定义类额外视图、自定义类手势,你遇到的崩溃是Storyboard连接配置错误导致的,和功能本身兼容性无关。

崩溃原因

你收到的报错信息如下:

Thread 1: "Custom instantiated <pocStoryboardDependencyInjection.ListCountriesViewController: 0x148005e40> must be kind of class pocStoryboardDependencyInjection.CustomObject"

报错的核心原因是:你把为ListCountriesViewController提供实例的createListCountriesViewController segueAction,错误绑定给了场景内的CustomObject对象。系统在实例化场景时会先后触发两次该方法:

  • 第一次是实例化ListCountriesViewController本身,返回的控制器类型匹配,执行正常
  • 第二次是实例化CustomObject对象时,系统误调用了同一个segueAction,拿到的返回值是ListCountriesViewController类型,和期望的CustomObject类型不匹配,因此抛出类型不兼容异常

删除自定义对象后没有了第二次调用,因此问题消失。

修复步骤

你现有的代码逻辑完全正确,不需要修改,只需要修正Storyboard的连接配置即可:

  • 打开两个场景之间的segue的「Connection Inspector」,确认createListCountriesViewController仅绑定到segue的instantiation属性上,没有其他额外绑定
  • 打开ListCountriesViewController场景的「Connection Inspector」,找到你添加的CustomObject对象,删除其错误绑定的SegueAction连接
  • 修复后CustomObject会被系统自动实例化,并通过IBOutlet正常注入到ListCountriesViewController的customObject属性中

三类自定义对象的使用说明

  • 自定义类Object:直接在Storyboard场景中拖入「Object」组件,修改为自定义类后绑定IBOutlet即可,不需要额外编写实例化逻辑
  • 自定义类额外视图:直接在场景中添加视图,修改为自定义类后绑定IBOutlet即可正常使用,依赖注入流程不受影响
  • 自定义类手势:直接在场景中拖入对应的手势识别器,修改为自定义类后绑定action或IBOutlet即可正常使用
class ViewController: UIViewController {

    @IBSegueAction
    func createListCountriesViewController(_ coder: NSCoder, sender: Any?, segueIdentifier: String?) -> ListCountriesViewController? {
        let controller = ListCountriesViewController(coder, userForm: ["field1"])
        return controller
    }

}

class ListCountriesViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    @IBOutlet var customObject: CustomObject!
    private let userForm: UserForm

    init?(_ coder: NSCoder, userForm: UserForm) {
        self.userForm = userForm
        super.init(coder: coder)
    }
    
    required init?(coder: NSCoder) {
        fatalError()
    }

}

class CustomObject: NSObject {
    
}

内容的提问来源于stack exchange,提问作者Blazej SLEBODA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:06:01