2016-07-20 4 views
4

Ich bin ein Geschäft über eine xib Instanziierung:NSLayoutConstraint Stellen sind durchweg nil während andere Steckdosen sind nicht

let cShop = UINib(nibName: "connectedShop", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! connectedShop 

Dieser Shop hat sich diese benutzerdefinierten Klasse zugeordnet:

import Foundation 
import UIKit 
class connectedShop : UIView{ 

    @IBOutlet weak var bannerViewHight: NSLayoutConstraint! 

    @IBOutlet weak var bannerViewTop: NSLayoutConstraint! 
    @IBOutlet weak var bannerViewLeft: NSLayoutConstraint! 
    @IBOutlet weak var bannerViewRight: NSLayoutConstraint! 

    @IBOutlet weak var banerDiscount: UIImageView! 
    @IBOutlet weak var bannerImageShop: UIImageView! 
    @IBOutlet weak var bannerTitle: UILabel! 
    @IBOutlet weak var bannerDescription: UILabel! 
    @IBOutlet weak var bannerButton: UIButton! 

    @IBAction func bannerButtonAction(sender: UIButton) { 

    } 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder)! 
    } 
} 

Und aus dem Code ich nenne dieses Geschäft wie folgt aus:

let cShop = UINib(nibName: "connectedShop", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! connectedShop 


cShop.bannerTitle.text = "shopTitle" //work 


shopContainer.addSubview(cShop) 

cShop.bannerViewLeft.constant = 0 //make my app crash 
cShop.bannerViewRight.constant = 0 // " 
cShop.bannerViewTop.constant = 0 // " 

Als ich die bannerTitle.text Eigenschaft meine app gesetzt weiter und Debugging sehe ich dieser Ausgang initialisiert wird, aber die Einschränkungen sind nicht und wenn die Compiler sind in der Zeile, die ein konstante zuweisen, ist es immer die gleichen Fehler werfen:

fatal error: unexpectedly found nil while unwrapping an Optional value 

Debuggen ich gesehen habe, gibt es eine Auslass, der initialisiert wird:

enter image description here

weiß jemand, warum dies geschehen kann? mein conections

Diese sind:

enter image description here

+0

Können Sie bitte zeigen, wie Sie sie in Interface Builder verbunden haben? – fiks

+0

Bearbeitet, um ein Bild meiner Verbindungen hinzuzufügen – user3033437

+0

Können Sie 'print (cShop.bannerTitle.text)' nennen? Das Setzen des Wertes verursacht keinen Absturz, wenn der Empfänger null ist, deshalb stürzt er nicht in dieser Zeile ab, aber der 'bannerTitle' kann auch null sein. – fiks

Antwort

12

Ich hatte das gleiche Problem. Ändern Sie Ihre Constraint-Outlets zu stark.

+0

Dies löst mein Problem, aber ich habe nicht verstanden, warum es funktioniert hat. Kannst du seinen Grund erklären? @SergioM –

+0

@ YusufKamilAK sicher. Da die Referenz schwach ist, wird der Verweis auf die Bedingung an einem bestimmten Punkt im Lebenszyklus fallengelassen. – SergioM

4

Entfernen Sie einfach schwach von der Deklaration.

@IBOutlet weak var bannerViewHight: NSLayoutConstraint! 

zu

@IBOutlet var bannerViewHight: NSLayoutConstraint! 

Tun Sie es für alle und es das ist.

Verwandte Themen