2016-11-08 1 views
0

Ich versuche, eine Unteransicht in einem viewController hinzuzufügen. Um das auszuführen, habe ich eine xib Datei und eine zugehörige Klasse erstellt. Der Code der zugehörigen Klasse ist unten angegeben:App plötzlich Absturz beim Aufruf von Super.init (Coder: aDecoder)

import UIKit 

@IBDesignable class CustomClassViewController: UIView { 

@IBOutlet weak var myLabel: UILabel! 

var Dummyview : UIView! //= UIView() 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    setup() 
} 

required init (coder aDecoder : NSCoder){ 

    super.init(coder : aDecoder)! 
    setup() 
} 

func setup() { 
    Dummyview = loadViewFromNib() 
    Dummyview.frame = bounds 
    Dummyview.autoresizingMask = UIViewAutoresizing.FlexibleWidth 
    Dummyview.autoresizingMask = UIViewAutoresizing.FlexibleHeight 
    addSubview(Dummyview) 
} 

func loadViewFromNib() -> UIView { 
    let bundle = NSBundle(forClass : self.dynamicType) 
    let nib = UINib(nibName: "Custom View", bundle: bundle) 
    let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView 
    return view 
} 

Es zeigt keinen Fehler vor dem Ausführen der Anwendung, aber es stürzt ab, wenn ich die Anwendung ausführen. Der Fehler zeigt, wie unten:

"Threat 1: EXC_BAD_ACCESS (code = 2, Adresse = 0x7fff52776e88)"

super.init(coder : aDecoder)!

Aber keine Fehler in Ausgabe.

Ich habe versucht, die Lösung in,und here zur Verfügung gestellt, aber nicht funktioniert.

Was soll ich tun? Irgendeine Lösungsmöglichkeit? Lass es mich wissen, bitte. Vielen Dank im Voraus

Antwort

0

Init mit Coder kann fehlschlagen, sollten Sie nicht zwingen, dort auszupacken. Versuchen Sie Folgendes:

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

Auch Ihre Klasse CustomClassViewController eine Unterklasse der UIView und nicht die UIViewController. Ändern Sie diese Zeile

@IBDesignable class CustomClassViewController: UIView { 

zu

class CustomClassViewController: UIViewController { 

Hinweis: Ein View-Controller kann nicht sein IBDesignable

+0

Danke für die Kommentare. Ich habe versucht, Ihre bereitgestellte Lösung, aber es hat nicht für mich funktioniert. Andere Dinge Wenn ich die Klasse nicht als @IBDesignable deklariere, dann wird sie in meiner Ansicht nicht als Unteransicht angezeigt. –

+0

Whay meinst du "es wird nicht in meiner Ansicht Controller als Unteransicht angezeigt" Bitte lernen Sie IBDesignable zuerst zu verwenden . Hier ist ein wirklich guter Artikel: http://shipster.com/ibinspectable-ibdesignable/ Ein UIViewController kann nicht IBDesignable sein. Sie verwirren die Ansicht und den ViewController. Was genau willst du? Eine IBDesignable UIView oder ein UIViewController? – Istvan

0

Die Spitze sollte nicht eine Klasse setzen in Interface Builder. Andernfalls erhalten Sie eine Endlosschleife, da Ihre Klasse versucht, sich jedes Mal zu instanziieren, wenn sie diese Nib aufruft.

Wenn Sie diese Ansichtsvorlage in Ihrem Storyboard verwenden möchten, ziehen Sie eine Ansicht und stellen Sie diese auf Ihre benutzerdefinierte Ansichtsklasse ein.

Verwandte Themen