Ios 在自定义UICollectionViewCell中返回nil的UIImageView

Ios 在自定义UICollectionViewCell中返回nil的UIImageView,ios,swift,uiimageview,Ios,Swift,Uiimageview,上周我问了一个类似的问题,但我想我已经把问题缩小到更具体的问题上了。当我使用collectionView.DeQuereUsableCellWithIdentifierNuCell时,自定义单元格正在加载,并且看起来被正确调用。forIndexPath:indexPath作为MenuCollectionViewCell MenuCell是自定义单元格的重用标识符,MenuCollectionViewCell是保存自定义代码的swift文件。通过调试代码,我确定未加载UIImageView。我做了

上周我问了一个类似的问题,但我想我已经把问题缩小到更具体的问题上了。当我使用collectionView.DeQuereUsableCellWithIdentifierNuCell时,自定义单元格正在加载,并且看起来被正确调用。forIndexPath:indexPath作为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
    }

}
这是自定义单元格文件:

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

}
我收到的错误是由于为可选项展开nil值而导致的终止。当然,问题是UIImageView,任何解决这个问题的帮助都将是巨大的

编辑/解决


问题在于与UICollectionView的连接。我有它的参考资料,但我没有正确地使用它。我试图在故事板中设置数据源和委托,这似乎是我的问题。当我移动到代码并进行引用,并以我处理这两个调用的方式引用它时,它立即修复了它。我希望这可以帮助其他人,如果他们遇到同样的问题!现在开始定制它,因为它弹出

UIImageView根本没有问题。Rdelmar在检查插座是否正确的声明中是正确的。menuCollectionView的出口引用未正确链接,这导致错误弹出。通过修复@IBOutlet连接,并通过代码设置委托和数据源,而不是弄乱故事板,它立即解决了问题。我用来设置委托和数据源的代码如下所示,完全取决于连接是否正确

self.menuCollectionView.delegate = self
self.menuCollectionView.dataSource = self

真的很简单。我希望这可以帮助其他人,如果他们遇到类似的问题!首先检查连接!!!然后检查并确保一切都在做它应该做的事情

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

self.collectionView?.delegate = self
self.collectionView?.dataSource = self
我找到了这个答案,非常激动,因为我确实遇到了这个问题。但是,在检查我的连接并确保正确分配了代理和数据源之后,我的imageView仍然为零

事实证明,我已经在故事板中注册了我的新子类,因此我不得不从代码中删除此调用:

self.myCollectionView.registerClass(MyCollectionViewCell.self, forCellWithReuseIdentifier: Constants.reuseIdentifier)

这取代了故事板中的注册,导致imageView对我来说为零。在我删除代码后,一切都正常了。谢谢你的问题SamG,希望这能帮助其他可能有这两个问题之一的人。

对我来说,这个经常讨论的话题的解决方案没有直接的帮助。最后,我通过将集合可重用视图标识符添加到情节提要自定义单元来解决这个问题。我将该值设置为与数据源函数dequeueReusableCellwithReuseIdentifier中相同的值:。。。。我认为这是一个非常基本的问题:

您是否在IB中连接了imageView插座?您是否将IB中单元格的类更改为MenuCollectionViewCell?我尝试连接IB中的imageView,但出现错误,提示您无法连接到原型单元格。是的,我确保课程被正确地改了。也许imageView可以连接,但我操作不正确?必须将插座连接到自定义单元格子类,而不是控制器,这就是为什么会出现此错误。实际上,我已将IBOutlet连接到自定义单元格类中imageView的引用。我想知道是不是我安排事情的方式导致了这个问题?我正在使用一个普通的UIViewController,里面有一个CollectionView作为菜单的基础,这是我目前正在尝试设置的。但我仔细检查了一下,插座确实转到了自定义单元格子类,我不知道该说什么。我只看到您在尝试将插座连接到手机以外的其他设备时报告的错误。如果你能把你的项目发到某个地方,我可以看看。谢谢你,安德鲁!我在尝试在collectionviewcell子类中显示简单图像时遇到了这个问题。已返回自定义单元格对象,但imageView属性始终为零。删除registerClass调用也为我修复了它。