2016-05-05 15 views
1

Ich habe eine abstrakte Basisklasse für UIViewController, von der alle Controller in meiner Anwendung erben. Ich habe auch eine Unterklasse von UIView (View), die ein paar zusätzliche gewünschte Eigenschaften, reactive Kakao awesomeness unter ihnen hinzufügt. Jetzt in meiner benutzerdefinierten Ansicht Controller-Klasse, mag ich loadView außer Kraft zu setzen und dies zu tun:Benutzerdefinierte loadView- und Containeransichten

override func loadView() { 
    let customView = View(frame: UIScreen.mainScreen().bounds) 
    self.view = customView 
} 

und dann habe ich eine Eigenschaft rac_view:

var rac_view: View { 
    return self.view as? View ?? View() 
} 

, so dass alle Subklassen meiner Ansicht Controller-Klasse haben können sofortigen Zugriff auf die View Eigenschaft ohne zusätzliche Casting selbst durchführen zu müssen.

Alles funktioniert gut, bis ich loadView überschreiben. Sobald ich tue, ich einen Absturz beim Anwendungsstart erhalten:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'containerView is required.' 

In meinem Drehbuch, mein erster View-Controller verfügt über mehrere Container Ansichten mit eingebetteten segues anderen Ansicht-Controller, die von meiner abstrakten Basisklasse erben. Aus irgendeinem Grund wirft das Überschreiben loadView und das Festlegen meiner eigenen benutzerdefinierten Ansicht einen Haken in den Arbeiten, wenn es um Containeransichten geht, und ich weiß nicht warum.

Hat jemand so etwas schon mal gesehen oder erlebt?

+0

Es könnte sein, weil Sie self.view zwei verschiedenen Dingen zuweisen, einmal zur benutzerdefinierten Ansicht und die andere zu rac_view. Haben Sie auch einen anderen Initialisierer als loadView ausprobiert? – Echizzle

Antwort

1

Ich fand heraus, der Grund war, trotz der Einstellung einer benutzerdefinierten Ansicht in loadView, in meinem Storyboard meine Ansichten Controller-Ansichten waren vom Typ UIView, nicht View. Eigentlich musste ich überhaupt nicht loadView überschreiben, einfach die View-Eigenschaft im Storyboard auf meine benutzerdefinierte Klasse setzen.

Verwandte Themen