[英]'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.