简体   繁体   English

“必须使用非零布局参数初始化 UICollectionView”错误

[英]'UICollectionView must be initialized with a non-nil layout parameter' bug

I'm initializing a UICollectionViewController in SceneDelegate :我在SceneDelegate UICollectionViewController

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }
      
    let window = UIWindow(windowScene: windowScene)
    let tabBarVC = AppTabBarController()
    
    // I init with a layout here
    let collectionVC = CollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()) 

    collectionVC.tabBarItem = UITabBarItem(tabBarSystemItem: .favorites, tag: 2)
    tabBarVC.viewControllers = [collectionVC]
    let navigationController = UINavigationController(rootViewController: tabBarVC)

    window.rootViewController = navigationController
    window.makeKeyAndVisible()
        
    self.window = window
}

Then I have my UICollectionViewController class:然后我有我的 UICollectionViewController class:

class CollectionViewController: UICollectionViewController {
    
    private let searchController = UISearchController(searchResultsController: UICollectionViewController())
            
    override func viewDidLoad() {
        super.viewDidLoad()
                    
        searchController.searchResultsUpdater = self
        searchController.automaticallyShowsSearchResultsController = true
        searchController.obscuresBackgroundDuringPresentation = true
        
        collectionView.delegate = self
        collectionView.dataSource = self
        collectionView.register(CollectionViewCell.self, forCellWithReuseIdentifier: CollectionViewCell.reuseID)
        collectionView.keyboardDismissMode = .onDrag
        collectionView.reloadData()
        
        let refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action:  #selector(refreshData), for: .valueChanged)
        collectionView.refreshControl = refreshControl
    }
}

I initialize my CVC with a layout but I still have the nil layout error which doesn't make any sense:我用布局初始化我的 CVC,但我仍然有 nil 布局错误,这没有任何意义:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter'由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“必须使用非零布局参数初始化 UICollectionView”

According to the docs , these are the valid initializers for a UICollectionViewController根据文档,这些是UICollectionViewController的有效初始值设定项

init(collectionViewLayout: UICollectionViewLayout)初始化(collectionViewLayout:UICollectionViewLayout)

init(nibName: String?, bundle: Bundle?) init(nibName: String?, bundle: Bundle?)

init?(coder: NSCoder)初始化?(编码器:NSCoder)

In your scene delegate , this is done fine:在您的scene delegate中,这做得很好:

let collectionVC
    = CollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()) 

However, in your CollectionViewController , you don't use any of the viable initializers when initializing UISearchController但是,在您的CollectionViewController中,您在初始化UISearchController时不使用任何可行的初始化程序

private let searchController
    = UISearchController(searchResultsController: UICollectionViewController())

I believe it is this UICollectionViewController you are trying to instantiate with an invalid initializer that is causing your problems我相信正是这个UICollectionViewController你正试图用一个无效的初始化程序实例化导致你的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 'UICollectionView必须使用非nil布局参数初始化'-Swift 4 - 'UICollectionView must be initialized with a non-nil layout parameter' - Swift 4 “ UICollectionView必须使用非null布局参数初始化” - 'UICollectionView must be initialized with a non-nil layout parameter' 错误:UICollectionView必须使用非nil布局参数初始化 - Error: UICollectionView must be initialized with a non-nil layout parameter UICollectionView:必须使用非 nil 布局参数初始化 - UICollectionView: must be initialized with a non-nil layout parameter UiCollectionView必须使用非nil布局参数初始化Swift 3 - UiCollectionView must be initialized with a non-nil layout parameter Swift 3 即使在UICollectionView文件中定义了参数,也必须在Swift中使用非nil布局参数初始化UICollectionView - UICollectionView must be initialized with a non-nil layout parameter in Swift, even though the parameter is defined in the UICollectionView file 必须使用非nil布局参数初始化UICollectionView。 迅速与UICollectionView错误 - UICollectionView must be initialized with a non-nil layout parameter. error in swift with UICollectionView 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'UICollectionView必须使用非nil布局参数初始化 - Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter 使用JSQMessagesCollectionView时,“ UICollectionView必须使用非nil布局参数初始化” - 'UICollectionView must be initialized with a non-nil layout parameter' while using JSQMessagesCollectionView 使用多个UICollectionView时,出现错误,“ ...必须使用非nil布局初始化” - With Multiple UICollectionView's, getting error, “… must be initialized with non-nil layout”
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM