在Swift 3

时间:2017-09-20 15:15:12

标签: ios swift uicollectionview uicollectionviewcell

我需要能够在嵌套的集合视图中设置文本标签。 我可以在print语句中显示每个值,但是当我将它分配给UILabel时,我得到fatal error: unexpectedly found nil while unwrapping an Optional value

我从父集合视图加载数据并将其分配给数据源:

private var timeZone: [AlternativeTimeZone]!
var setTimeZones: [AlternativeTimeZone] {
    get {
        return self.timeZone
    }
    set {
        self.timeZone = newValue
    }
}

childcollectionviewService.setTimeZones = alternateTimesZonesData

该服务是一个外部类,它包含对父集合视图的所有引用,以保持视图控制器的小。

我的嵌套集合视图代码看起来很标准。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AlternateTimeZoneCell", for: indexPath) as? AlternateTimeZoneCell else { return UICollectionViewCell() }
    print("Time Zone:", timeZone[indexPath.row].time)
    cell.alternateTime.text = timeZone[indexPath.row].time
    return cell
}

AlternativeTimeZone是一个带有文本字符串属性的简单结构。我在一个嵌套的集合视图中,所以indexPath可以覆盖孩子吗?

3 个答案:

答案 0 :(得分:0)

我认为问题可能在于这一行:

guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AlternateTimeZoneCell", for: indexPath) as? AlternateTimeZoneCell else { return UICollectionViewCell() }

尝试替换为:

guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AlternateTimeZoneCell", for: indexPath) as? AlternateTimeZoneCell else { return AlternateTimeZoneCell() }

答案 1 :(得分:0)

听起来,您alternateTime中的字段AlternateTimeZoneCell的单元格模板中的插座链接已损坏。检查您加载的单元格中是否为零。还要检查出列是否成功。

答案 2 :(得分:0)

我设法通过删除数据源并将声明委托给awakeFromNib方法解决了这个问题,因为事实证明init试图在给出数据之前设置alternateTime值它。