UIImageView在自定义UICollectionViewCell中返回nil

Sam*_*amG 2 uiimageview ios swift

上周我问了一个类似的问题,但我想我已经把它缩小到更具体的问题.正在加载自定义单元格,并且当我使用collectionView.dequeReusableCellWithIdentifier("MenuCell", forIndexPath: indexPath) as MenuCollectionViewCell"MenuCell" 时,看起来正确调用我的自定义单元格的重用标识符,而MenuCollectionViewCell是保存自定义代码的swift文件.从调试代码我已经确定没有加载UIImageView.我做了一张支票,这就是我想出来的.为什么没有加载ImageView并且只显示为nil我不知道.我将发布加载它的文件的代码和自定义单元代码.

class MenuViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate
{
    // Not sure if I really need this
    @IBOutlet var menuCollectionView: MenuCollectionView!

    override func viewDidLoad()
    {
        super.viewDidLoad()
        // Do any additional setup after loading the view
        view.backgroundColor = UIColor(patternImage: UIImage(contentsOfFile: "behind_alert_view.png"))
        // This was the fix here
        self.menuCollectionView.delegate = self
        self.menuCollectionView.dataSource = self

    }

    // Variables
    var menuImagesArray = ["MyProfileIcon.png"]

    // Data Source Protocol
   func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int
    {
        return 1
    }

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

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
    {
        var menuCell: MenuCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("MenuCell", forIndexPath: indexPath) as MenuCollectionViewCell

        var image: UIImage!

        if ((menuCell.imageView) != nil)
        {
            image = UIImage(named: menuImagesArray[indexPath.row])
        }

        menuCell.imageView.image = image



        return menuCell
    }

}
Run Code Online (Sandbox Code Playgroud)

这是自定义单元格文件:

class MenuCollectionViewCell: UICollectionViewCell
{
    @IBOutlet var imageView: UIImageView!

}
Run Code Online (Sandbox Code Playgroud)

我收到的错误是由于解包可选的nil值而导致的终止.问题是UIImageView肯定,任何帮助解决这个问题都会很棒!

编辑/解决

问题是与UICollectionView的连接.我有参考它,但我没有正确使用它.我试图在故事板中设置dataSource和委托,这对我来说似乎是个问题.当我移动到代码并制作引用并以我对这两个调用所做的方式引用它时,它立即修复它.我希望如果他们遇到同样的问题,这可以帮助别人!现在开始自定义它,因为它弹出!

小智 6

不需要像在顶部那样连接UICollectionView,因为已经完成了,但是分配了委托和数据源.这可以通过这种方式完成:

self.collectionView?.delegate = self
self.collectionView?.dataSource = self
Run Code Online (Sandbox Code Playgroud)

我找到了这个答案并且非常兴奋,因为我确实遇到了这个问题.但是,在检查我的连接并确保正确分配了委托和数据源之后,我的imageView仍然是零.

原来,我已经在故事板中注册了我的新子类,所以我不得不从我的代码中删除这个调用:

self.myCollectionView.registerClass(MyCollectionViewCell.self, forCellWithReuseIdentifier: Constants.reuseIdentifier)
Run Code Online (Sandbox Code Playgroud)

这取代了故事板中的注册,导致imageView对我来说是零.删除代码后,事情奏效了.感谢SamG提出的问题并希望这可以帮助其他可能遇到这两个问题的人.