出乎意料地发现nil为可选值 - 在可选链接后不是nil

时间:2016-03-14 16:21:08

标签: swift uiimage uicollectionview

我在CoreData中拥有一系列图像,这些图像在主视图控制器中获取并使用,并传递给详细视图控制器并再次传递到容器视图控制器。图像在Master和Detail控制器中成功显示,但不在Container View Controller中显示。

在Container View Controller中,我使用条件绑定来解包cellForItemAtIndexPath中的图像。

enter image description here

在调试器中,在加载时打印("实际上是:(images.count)")显示我在数组中有一个图像,而imageForCell不是零 - 它是一个UIImage - 但是,在解开一个Optional值时,我仍然意外地发现了nil ......

enter image description here

1 个答案:

答案 0 :(得分:1)

所以要给出这个问题的答案,首先要检查什么是零。你假设你解开的价值是零,但你的观点实际上是零。

小贴士:使用gaurd语句。在guard语句中,您必须指定代码在错误情况下必须执行的操作。在guard语句之后,您可以使用您打开的值。当您的图像为零时,您当前的代码只显示一个没有任何消息的空单元格。如果它不显示图像,你就不会知道出了什么问题。

我个人喜欢在我的方法中检查每个可能的选项。这使得方法非常大,但可以防止错误。我也想指定对象的类型,但这完全取决于你。对我来说,主要是“UIImage”和“UIImage”之间的区别。在你的情况下,UIImage可能仍然是零。

继续下一个问题,为什么它仍然不起作用。所以我查看了从故事板加载时UICollectionView如何初始化其单元格。人们说当在那些场景中手动使用registerClass时,它会覆盖从故事板加载的视图。见:How to set a UILabel in UICollectionViewCell。我请你把它删除,以确认我的怀疑。

我假设您在不从故事板或nib / xib加载视图时只需要使用registerClass。