0

我有带有 ENSideMenu 的主视图控制器,用于侧边菜单,在主视图控制器中我有退出按钮。我已将 ENsideMenu MyNavigationController 作为故事板中的初始视图控制器。

我想先在应用程序中显示主页,它工作正常,但是当我从登录到主页时,主页没有响应..一旦我退出,主页就会再次响应。

这是我的代码:

在 appdelegate 中:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    let userId: String? = KeychainWrapper.standard.string(forKey: "Uid") 
    print("appdelegate userid \(userId)")
    if userId != nil{
        let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let homeVC = mainStoryBoard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
        self.window!.rootViewController = homeVC
    }
    return true
}

在 LogInVC 的 loginButton 中:

    let saveUserId: Bool = KeychainWrapper.standard.set(Uid ?? "", forKey: "Uid")
                print("the userid is \(saveUserId)")

                if (Uid?.isEmpty)!
                {
                    print("login fail")
                }
                else{

                    DispatchQueue.main.async {

                        let homeVC = self.storyboard?.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
                        let appDelagate = UIApplication.shared.delegate
                        appDelagate?.window??.rootViewController = homeVC
                    }
                }

在 HomeVC 中:

  func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    let nextViewController = self.storyboard?.instantiateViewController(withIdentifier: "MakePaymentViewController") as! MakePaymentViewController
    self.navigationController?.pushViewController(nextViewController, animated: true)
    let indexPathHome = indexPath.row
    print("home collectionItem indexpath \(indexPathHome)")

}


 @IBAction func signOutButton(_ sender: Any) {
    print("signout tapped")
    KeychainWrapper.standard.remove(key: "Uid")
 }

  @IBAction func sideMenuButton(_ sender: Any) {
    print("in side menu")
    toggleSideMenuView()
 }

我已将 ENsideMenu MyNavigationController 作为故事板中的初始视图控制器。

我需要 homeVc 在登录后做出响应。请帮我解决这个问题。

4

1 回答 1

2

您正在使用 custom MyNavigationControllerwithHomeViewController进行导航 - 您已经提到,这是您在情节提要中的初始视图。但是......还有另外两个地方,你在HomeViewController没有加载的地方MyNavigationController

  1. AppDelegate

改变加载HomeViewController

let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
window?.rootViewController = mainStoryBoard.instantiateViewController(withIdentifier: "MyNavigationController")
  1. LoginViewController

改变

let homeVC = self.storyboard?.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
let navigationController = UINavigationController(rootViewController: homeVC)

let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
let navigationController = mainStoryBoard.instantiateViewController(withIdentifier: "MyNavigationController")

另外,我给你一些建议:

  1. 避免!在您的代码中使用 - 这是使您的应用程序崩溃的直接方法。还有很多其他方法可以处理选项
  2. 避免self在闭包中捕获强闭包(例如LoginViewController,当您将视图更改为 HomeVC 时)。这会导致保留循环,从而导致内存泄漏。
  3. 删除所有不需要self的 s - 当编译器告诉您,您需要添加self时 - 查看第 2 点)并添加weak self而不是strong.
  4. 删除编译器警告 - 您已经有 19 个警告,您可以在几分钟内删除所有警告。
于 2019-09-24T11:59:37.503 回答