【问题标题】:Storyboard dependency injection for scene with custom objects带有自定义对象的场景的情节提要依赖注入
【发布时间】:2021-11-15 23:53:47
【问题描述】:

我有自定义初始化?目标场景上称为 ListCountriesViewController 的方法,该方法在位于 ViewController 中的方法“createListCountriesViewController”内调用,并在连接 ViewController 和 ListCountriesViewController 场景的“连接检查器”处设置故事板 segue 实例化属性。 ListCountriesViewController 包含一个通过情节提要“对象”创建的自定义对象。当 segue 执行时,方法“createListCountriesViewController”被执行了两次,第二次执行以 NSExeption 结束:

线程 1:“自定义实例化 必须是类 pocStoryboardDependencyInjection.CustomObject"

从情节提要场景中删除自定义对象后,问题就解决了。

Storyboard Dependency Injection,包含在 UIKit/iOS 13 中,与场景中设置的对象兼容,例如:对象(自定义类)、附加视图(自定义类)、手势(自定义类)如果是,如何我解决了我的问题?

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!

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

}

class CustomObject: NSObject {
    
}

【问题讨论】:

  • 问得很好。您可以大大简化示例(我们在这里不需要表格视图控制器,也不需要知道“真正的”自定义对象会是什么样子),但是您已经完美地证明了这个问题。

标签: ios uikit storyboard


【解决方案1】:

包含在 UIKit/iOS 13 中的 Storyboard Dependency Injection 是否与场景中设置的对象兼容,例如:对象、附加视图、手势?

显然不是。正如您的示例(完美地)展示的那样,场景中仅存在额外的顶级对象会导致 segue 动作行为不端。引发崩溃不需要对故事板 CustomObject 的引用/出口。

我认为这是一个错误;您应该向 Apple 提交报告。

【讨论】:

  • 我阅读了您的回答,正如您所说:如果您的 UIStoryboard 场景在根级别有对象、视图和手势对象,那么使用视图控制器自定义 init 方法将无法实例化场景。我是对的?
  • 修改了我的答案,但答案是一样的。我认为你已经很好地展示了一个错误,你应该向 Apple 提交报告。
  • 我还编辑了我的问题,在那里我说明了其他根级别对象。经过额外的测试后,我可以声明场景额外的根级别对象在设置为使用自定义子类时会导致崩溃。
  • 不幸的是,我不能多次支持您的问题。 :) 非常棒的工作,但我不知道我们现在还能说什么。
  • 我向你保证,在 iOS 15 上也是如此。
猜你喜欢
  • 2012-07-22
  • 2015-03-04
  • 2012-09-01
  • 2017-10-25
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
相关资源
最近更新 更多