Hi I am trying to apply swinject for my IOS project and currently I have been stuck..
I have 2 part in my application
- LOGIN Part
- MAIN Part
Scenario is if it's logged in already when application begins or when login is successfully done, it should be moved to MAIN Part and I hope to Each of them has their own storyboard that the swinject scope manages the instances separately.
when login is done, the MAIN part injected instance should be newly generated and when logout is done, it should be going back to LOGIN part and the main part injected instance must be gone..
The below is my view controllers structure:
with this designation, I am trying to navigate to MAIN views with the codes below but keep getting error.
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'
What am I supposed to do for solving this??