程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了防止 iOS 应用加载默认的 Storyboard 入口点大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决防止 iOS 应用加载默认的 Storyboard 入口点?

开发过程中遇到防止 iOS 应用加载默认的 Storyboard 入口点的问题如何解决?下面主要结合日常开发的经验,给出你关于防止 iOS 应用加载默认的 Storyboard 入口点的解决方法建议,希望对你解决防止 iOS 应用加载默认的 Storyboard 入口点有所启发或帮助;

我正在关注协调器模式上的 this tutorial,到目前为止,我已经完成了创建协调器并从应用程序委托运行 start() 的过程。但是随后在该协调器上调用函数不起作用,因为突然协调器 var 为零。显示的初始视图控制器似乎不是来自 coordinator.start() 的控制器,而是来自故事板入口点的控制器。我确实在项目目标的主界面中禁用了 Main。@H_874_3@

AppDelegate:@H_874_3@

func application(_ application: UIApplication,dIDFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    if let registry = DependencyResolver.shared as? DependencyRegistry {
        DependencyGraph.setup(for: registry)
    }
    
    let navController = UINavigationController()
    coordinator = MainCoordinator(navigationController: navController)
    coordinator?.start()
    
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.rootVIEwController = navController
    window?.makeKeyAndVisible()
    return true
} 

主要协调员:@H_874_3@

class MainCoordinator: Coordinator {

    var navigationController: UINavigationController
    var childCoordinators = [Coordinator]()

    init(navigationController: UINavigationController) {
    self.navigationController = navigationController
    }

    func start() {
        let vc = InitVIEwController.instantiate()
        vc.coordinator = self. //!!I do hit this breakpoint
        navigationController.pushVIEwController(vc,animated: falsE)
    }
}

初始化视图控制器(故事板中的初始视图控制器,但我用协调器显示它):@H_874_3@

class InitVIEwController: UIVIEwController,Storyboarded {

    private var cameraviewmodel: Cameraviewmodel!
    weak var coordinator: MainCoordinator?

    @IBACtion func openCameraview(_ sender: Any) {
        coordinator?.openCameraview() //!!here coordinator is nil
    }

    overrIDe func vIEwDIDLoad() {
        super.vIEwDIDLoad()
    }
}

Storyboarded 协议 - 用于通过 ID 将视图控制器从故事板中取出:@H_874_3@

protocol Storyboarded {
    static func instantiate() -> Self
}


extension Storyboarded where Self: UIVIEwController {
    static func instantiate() -> Self {
        let fullname = NsStringFromClass(self)
        let classname = fullname.components(separatedBy: ".")[1]
        let storyboard = UIStoryboard(name: "Main",bundle: Bundle.main)
        let leController = storyboard.instantiateVIEwController(withIDentifIEr: className) as! Self
        return leController
    }
}

解决方法

问题仅仅是您正在查看的教程对于当前条件来说太旧了。不再有 Single View App 模板,App Delegate 不再包含窗口。如果您在 Xcode 11 或 Xcode 12 中创建项目,则该窗口归场景委托所有。实现场景委托的 willConnect 方法来完成应用委托在教程中所做的工作,一切都会变得生动起来。@H_874_3@

防止@H_949_38@main.storyboard自动加载的机制也发生了变化;您必须将其从 Info.plist 中的 Application Scene Manifest 中删除(手动编辑 - 没有简单的界面)。@H_874_3@

大佬总结

以上是大佬教程为你收集整理的防止 iOS 应用加载默认的 Storyboard 入口点全部内容,希望文章能够帮你解决防止 iOS 应用加载默认的 Storyboard 入口点所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:防止