Ios 集合视图/选项卡栏控制器崩溃

Ios 集合视图/选项卡栏控制器崩溃,ios,xcode,uicollectionview,uitabbarcontroller,Ios,Xcode,Uicollectionview,Uitabbarcontroller,在我的应用程序中,我使用选项卡栏控制器在视图控制器之间切换,在每个视图控制器上,我使用集合视图,然后转到不同的页面。当我在电脑上运行应用程序时,一切都正常。问题是当我在手机上运行应用程序时。每当我单击选项卡栏控制器中的某个选项卡,该选项卡就会转到一个包含集合视图控制器的页面,应用程序就会冻结,然后崩溃。我想我已经把问题缩小到了collection view控制器,因为我手机上的应用程序在没有collection view控制器的情况下不会崩溃。它仅在集合视图控制器正在使用时崩溃。这可能是什么原因

在我的应用程序中,我使用选项卡栏控制器在视图控制器之间切换,在每个视图控制器上,我使用集合视图,然后转到不同的页面。当我在电脑上运行应用程序时,一切都正常。问题是当我在手机上运行应用程序时。每当我单击选项卡栏控制器中的某个选项卡,该选项卡就会转到一个包含集合视图控制器的页面,应用程序就会冻结,然后崩溃。我想我已经把问题缩小到了collection view控制器,因为我手机上的应用程序在没有collection view控制器的情况下不会崩溃。它仅在集合视图控制器正在使用时崩溃。这可能是什么原因造成的?我已经看过了,但没有发现任何类似的问题

以下是其中一个集合视图控制器的代码:

import UIKit
class HighSchoolController: UIViewController, \UICollectionViewDataSource, UICollectionViewDelegate {

    var identities = [String]()

    let hsImage: [UIImage] = [
        UIImage(named: "dates")!,
        UIImage(named: "athletics_icon")!,
        UIImage(named: "interm-1")!,
        UIImage(named: "lunch_icon")!,
        UIImage(named: "pioneerpress")!,
        UIImage(named: "PIONEERNEWS")!,
        UIImage(named: "clubs_icon")!,
        UIImage(named: "contact_icon")!
    ]

    override func viewDidLoad() {
        super.viewDidLoad()

        identities = ["events", "athletics", "da", "lunch", "pioneer press", "pioneer news", "clubs", "contact"]

        //Navigationbar Shadow
        self.navigationController?.navigationBar.layer.shadowColor = UIColor.black.cgColor
        self.navigationController?.navigationBar.layer.shadowOffset = CGSize(width: 0.0, height: 4.0)
        self.navigationController?.navigationBar.layer.shadowRadius = 9.0
        self.navigationController?.navigationBar.layer.shadowOpacity = 0.9
        self.navigationController?.navigationBar.layer.masksToBounds = false

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return hsImage.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let hsCell = collectionView.dequeueReusableCell(withReuseIdentifier: "hsCell", for: indexPath) as! HighSchoolCell


        hsCell.hsImage.image = hsImage[indexPath.item]

        hsCell.layer.cornerRadius = (hsCell.layer.frame.height) / 2.0;
        hsCell.layer.masksToBounds = true

        return hsCell
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let vcName = identities[indexPath.row]
        let viewController = storyboard?.instantiateViewController(withIdentifier: vcName)
        self.navigationController?.pushViewController(viewController!, animated: true)
    }
}

在我看来,它一定是在你的
self.navigationController?…
线路上崩溃了。我猜您正在使用
CollectionViewController
作为
TabBarController
中选项卡的
rootViewController

如果要使用
navigationController
在选项卡内导航,需要附加
navigationController
作为选项卡的根,然后将
CollectionViewController
设置为
navigationController
rootViewController


您需要的不是
TabBarController>CollectionViewController
的层次结构,而是像
TabBarController>NavigationViewController>CollectionViewController

这样的层次结构。我通过在我的tabbar控制器中执行此操作,找到了它

  • let layout1=UICollectionViewFlowLayout()let cv1= CollectionView1(collectionViewLayout:layout1)

  • let layout2=UICollectionViewFlowLayout() 设cv2=CollectionView1(collectionViewLayout:layout2)

  • let layout3=UICollectionViewFlowLayout() 设cv3=CollectionView1(collectionViewLayout:layout3)

  • let layout4=UICollectionViewFlowLayout() 设cv4=CollectionView1(collectionViewLayout:layout4)


附加碰撞日志