0

嗨,我正在尝试为我的 IOS 项目应用 swinject,目前我被卡住了。

我的申请中有 2 个部分

  1. 登录部分
  2. 主要部分

场景是如果它在应用程序开始或登录成功完成时已经登录,它应该移动到主要部分,我希望他们每个人都有自己的故事板,swinject 范围分别管理实例。

登录完成后,应该新生成 MAIN 部分注入的实例,注销完成后,它应该回到 LOGIN 部​​分,并且主要部分注入的实例必须消失..

以下是我的视图控制器结构:

LOGIN 和 MAIN 视图控制器结构图

有了这个名称,我正在尝试使用下面的代码导航到 MAIN 视图,但不断出现错误。

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
        guard let _ = (scene as? UIWindowScene) else {
            return
        }

        // add these lines
        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        // if user is logged in before
        if let loggedUsername = UserDefaults.standard.string(forKey: "username") {
            // instantiate the main tab bar controller and set it as root view controller
            // using the storyboard identifier we set earlier
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let mainTabBarController = storyboard.instantiateViewController(identifier: "MainTabBarController")
            window?.rootViewController = mainTabBarController
        } else {
            // if user isn't logged in
            // instantiate the navigation controller and set it as root view controller
            // using the storyboard identifier we set earlier
            let loginNavController = storyboard.instantiateViewController(identifier: "LoginNavigationController")
            window?.rootViewController = loginNavController
        }
    }
extension SwinjectStoryboard {
    @objc class func setup() {

        defaultContainer.autoregister(UserProvider.self, initializer: UserProvider.init).inObjectScope(.container)

        defaultContainer.storyboardInitCompleted(HomeViewController.self) { resolver, controller in
            controller.userProvider = resolver ~> UserProvider.self
        }
    }
}
Storyboard (<SwinjectStoryboard.SwinjectStoryboard: 0x600002304300>) doesn't contain a view controller with identifier 'MainTabBarController'

我该怎么做才能解决这个问题?

4

1 回答 1

0

AppDelegate 在

var window: UIWindow?
    
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {    
    self.window = UIWindow(frame: UIScreen.main.bounds)
    return     
}

HomeVC 中的 SceneDelegate 您的主要部分和 LoginVC 您的登录部分,例如我的代码

登录成功状态 1 比 USERDEFAULT.set(true, forKey: "isLogin")

var window: UIWindow?
var navigationC: UINavigationController?
private(set) static var shared: SceneDelegate?


func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    guard let _ = (scene as? UIWindowScene) else { return }
    
    
    if USERDEFAULT.value(forKey:"isLogin") != nil{
        let homevc = MainStoryboard.instantiateViewController(withIdentifier: "ContainerViewController") as! ContainerViewController
        self.navigationC = UINavigationController(rootViewController: homevc)
    } else{
        let loginvc = MainStoryboard.instantiateViewController(withIdentifier: "LoginVC") as! LoginVC
        self.navigationC = UINavigationController(rootViewController: loginvc)
    }
    self.navigationC!.setNavigationBarHidden(true, animated: false)
    self.window?.clipsToBounds = true
    self.window?.rootViewController = navigationC
    self.window?.makeKeyAndVisible()
    Self.shared = self
}
于 2020-12-09T06:52:58.703 回答