这个问题在这里已有答案:
我在Swift中使用 UICollectionView
但是当我尝试更改单元格标签的文本时我得到了 .
func collectionView(collectionView: UICollectionView!, numberOfItemsInSection section: Int) -> Int
{
return 5
}
func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell!
{
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("title", forIndexPath: indexPath) as TitleCollectionViewCell
// Next line: fatal error: unexpectedly found nil while unwrapping an Optional value
cell.labelTitle.text = "This is a title"
return cell
}
有谁知道这个?
13 回答
我在Xcode 7.3上遇到了同样的问题 . 我的解决方案是确保我的细胞具有正确的 reuse identifiers . 在 table view section 下将 table view cell 设置为您在程序中使用的相应标识符名称 make sure they match .
我遇到了同样的问题,原因是因为我试图用错误的名称加载UIImage . 仔细检查
.setImage(UIImage(named: "-name-"
调用并确保名称正确 .这里有相同的消息,但原因不同 . 我有一个
UIBarButton
推了一个segue . segue缺少一个标识符 .也可以使用Nil Coalescing Operator .
几乎可以肯定,您的重用标识符
"title"
不正确 .我们可以从
dequeueReusableCellWithIdentifier
的UITableView.h
方法签名中看到返回类型是 Implicitly Unwrapped Optional :这是由
AnyObject
之后的感叹号决定的:所以,首先要考虑的是,什么是“隐式解包可选”?
The Swift Programming Language告诉我们:
所以,基本上,某些东西可能在某一点上是零,但从某些角度来看,它永远不会再为零 . 因此,我们通过将其作为未包装的值来节省一些麻烦 .
在这种情况下,
dequeueReusableCellWithIdentifier
返回这样的值是有意义的 . 提供的标识符必须已用于注册单元以供重用 . 提供一个不正确的标识符,dequeue可能会发生致命错误,应用程序崩溃,并且控制台输出提供:Bottom line: check your cell reuse identifier specified in the .storyboard, Xib, or in code, and ensure that it is correct when dequeuing.
您可以通过使用
if let
语句安全地解包cell.labelTitle
来防止崩溃 .您仍然需要进行一些调试,以了解为什么在那里获得零值 .
检查单元格是否正在使用
self.collectionView.registerClass(cellClass: AnyClass?, forCellWithReuseIdentifier identifier: String)
注册 . 如果是,则删除该行代码 .有关详细信息,请参阅此答案:Why is UICollectionViewCell's outlet nil?
"If you are using a storyboard you don't want to call this. It will overwrite what you have in your storyboard."
我不知道它是错误还是其他什么,但是当您使用自定义单元格时,您的标签和其他UI不会自动初始化 . 你应该在你的
UICollectionViewController
课程中尝试这个 . 它对我有用 .替换此行
cell.labelTitle.text = "This is a title"
与
cell.labelTitle?.text = "This is a title"
当我试图访问
UILabel
时,我收到了他的错误 . 我忘了在故事板中连接UILabel
到IBOutlet
,这导致应用程序因此错误而崩溃!我也有这个问题,问题出在视图控制器中 . 我不确定你的应用程序是如何构建的,所以我只会解释我发现的内容 . 我对xcode和编码很新,所以请耐心等待 .
我试图以编程方式更改UILabel上的文本 . 使用“self.mylabel.text”工作正常,直到我在同一个类下添加另一个视图控制器,该控制器也没有包含该标签 . 那是我收到你所看到的错误的时候 . 当我添加相同的UILabel并将其连接到另外的视图控制器时,错误就消失了 .
简而言之,似乎在Swift中,分配给同一个类的所有视图控制器都必须引用您在那里的代码,否则就会出错 . 如果您有两个具有不同代码的不同视图控制器,请将它们分配给不同的类 . 这对我有用,并希望适用于你正在做的事情 .
:)希望它能帮助一些挣扎的人 .
我自己四处寻找解决方案 . 只有我的问题与你在这里提到的UITableViewCell Not UICollectionView有关 .
首先,我是iOS开发的新手 . 像全新的,坐在这里试图通过我的第一个教程,所以不要听我的话任何事情 . (除非它的工作;))
我得到了一个零参考
cell.detailTextLabel.text
- 重新学习我正在关注的教程视频后,它看起来并没有错过任何东西 . 所以我输入了UITableViewCell的头文件并找到了这个 .var detailTextLabel: UILabel! { get } // default is nil. label will be created if necessary (and the current style supports a detail label).
所以我注意到它(并且当前样式支持细节标签) - 嗯,自定义样式默认情况下没有detailLabel . 所以我只需要在故事板中切换单元格的样式,一切都很好 .
我猜你的标签应该永远在那里?
因此,如果您的以下康纳的建议,这基本上意味着,如果该标签可用,那么使用它 . 如果您的样式设置正确并且重用标识符与Storyboard中设置的样式匹配,则除非您使用多个自定义单元格,否则不应进行此检查 .