2016-08-31 3 views
2

Wie der Titel angibt, habe ich eine Bezeichnung in einer UICollectionReusableView. Die Ansicht, die ich verwende, erfolgreich mit dem folgenden aus der Warteschlange entfernt:Label in UICollectionReusableView immer Null

func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { 
     let hourCell = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier:"Hour", forIndexPath: indexPath) as! HourCollectionReuseableView; 
     let time = String(indexPath.item) + "H"; 
     hourCell.setTime(time); 
     return hourCell; 
    } 

Hier ist die Interface Builder Ansicht von HourCollectionReuseableView. Ich stelle fest, dass ich hier tun dies in der benutzerdefinierten Klasse der Dateieigentümer:

enter image description here

Hier ist die Sammlung Reuse Identifikation:

enter image description here

Hier ist die HourCollectionReuseableView Klasse:

class HourCollectionReuseableView: UICollectionReusableView { 

    @IBOutlet weak var hourLabel: UILabel! 
    @IBOutlet weak var hourDividerLine: UIView! 

    override func awakeFromNib() { 
     super.awakeFromNib(); 
    } 

    func setTime(time:String) { 
     self.hourLabel.text = time; 
    } 

In meinem View-Controller registriere ich die Klasse wie folgt:

override func viewDidLoad() { 
     super.viewDidLoad(); 
     self.collectionView.registerClass(HourCollectionReuseableView.self, forSupplementaryViewOfKind: "Hour", withReuseIdentifier:"Hour"); 
    } 

Der Code hält auf self.hourLabel.text = time mit dem folgenden Fehler Absturz:

fatal error: unexpectedly found nil while unwrapping an Optional value

Wo ich falsch gehe?

+0

hier bekommen Sie die Ausgabe lassen die Zeit = String (indexPath.item) + "H"; oder nicht –

+0

Überprüfen Sie, dass Ihr 'hourLabel' mit der Ansicht verbunden ist? –

+1

Sie müssen Ihre Zelle nicht registrieren, während Sie das Storyboard verwenden. Überprüfen Sie auch, dass Sie Label keinen "Null" -Wert zuweisen. Absturz ist wegen Nullwertvergabe. –

Antwort

1

Wie @firstinq wies darauf hin, wie Sie mit einem .xib in Ihrem HourCollectionReuseableView arbeiten, sollten Sie registerNib statt registerClass versuchen Sie es mit.

Sie sind also Code sollte mehr aussehen wie

override func viewDidLoad() { 
    super.viewDidLoad(); 
    self.collectionView.registerNib(UINib(nibName: "HourCollectionReuseableView", bundle: nil), forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "Hour"); 
}