Ios CollectionView`DidSelect`方法正在被调用,但没有推动下一个VC,如何修复它?

Ios CollectionView`DidSelect`方法正在被调用,但没有推动下一个VC,如何修复它?,ios,swift,uicollectionview,Ios,Swift,Uicollectionview,我正试图从UICollectionViewDidSelect委托推送另一个VC,正在调用它, 但奇怪的是,它并没有推动启动的VC,我该如何修复它 我的AppDelegate.swift如下所示: import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? weak var coordinator: MainCoordin

我正试图从
UICollectionView
DidSelect
委托推送另一个VC,正在调用它, 但奇怪的是,它并没有推动
启动的
VC,我该如何修复它

我的
AppDelegate.swift
如下所示:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    weak var coordinator: MainCoordinator?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        self.window = UIWindow(frame: UIScreen.main.bounds)
        coordinator = MainCoordinator(navigationController: UINavigationController())
        self.window?.rootViewController = UIStoryboard.splashViewController()
        self.window?.makeKeyAndVisible()
        return true
    }

}
以及我的
SplashViewController
,在
SplashViewController
完成后,我将
RootVC
切换到
DispatchQueue
中的
MainVC

class SplashViewController: UIViewController {
    
    weak var coordinator: MainCoordinator?
    
    //MARK: -viewDidLoad()
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Do any additional setup after loading the view.
    }
    // MARK: - viewDidAppear()
    override func viewDidAppear(_ animated: Bool) {
        let animationView = AnimationView()
        let animation = Animation.named("SplashAnimation", bundle: Bundle.main)
        animationView.animation = animation
        animationView.frame = CGRect(origin: .zero, size: CGSize(width: self.view.frame.size.width, height: 200))
        animationView.center = self.view.center
        animationView.loopMode = .playOnce
        animationView.contentMode = .scaleAspectFit
        animationView.play { (finished) in
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: {
                if let vc = self.storyboard?.instantiateViewController(identifier: "MainViewController") as? MainViewController {
                    self.view.window?.rootViewController = vc
                    self.view.window?.makeKeyAndVisible()
                }
                
            })
        }
        view.addSubview(animationView)
    }
}
在我的
UICollectionView
DidSelect
委托中,我正在执行以下操作:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if collectionView == categoryCollectionView {
            let vc = self.storyboard?.instantiateViewController(identifier: "SymptomViewController") as! SymptomViewController
            self.navigationController?.pushViewController(vc, animated: true)
        } else {
            print("next collectionView not ready yet.. .")
        }
    }

它通常按预期运行,但现在它正在打印
print
语句,但从未推送下一个VC

首先,如果collectionView==categoryCollectionView
真的等于true,您需要确保


其次,我注意到您的
MainViewController
似乎没有嵌入到
NavigationController
中,因此当您调用
self.NavigationController?.pushViewController(vc,动画:true)
时,由于可选链接将检测到self.navigationController为
nil

由于我的声誉低下,我无法将其添加为注释,因此我以这种方式发布


您是否尝试过在collectionView委托方法的第一行上放置断点,并在调试器中使用“po”命令检查collectionView?由于if语句失败,很可能是其他collectionView触发了此委托方法。如果collectionView==categoryCollectionView
确实返回true,则必须确保

此外,一旦应用程序在断点上停止执行,检查调试导航器(如果您还没有)并了解导致指定断点的原因通常非常有用。

如果collectionView==categoryCollectionView
。。。这是真的吗?