wake-up-neo.com

benutzerdefinierte init-Methode von uiviewController mit Storyboard

ich habe Probleme beim Überschreiben der Initialisierungsmethode für meinen CustomViewController, der in meinem Storyboard entwickelt wurde.

jetzt mache ich (in meinem mainViewController):

self.customViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"CustomVC"];
self.customViewController.myObject = someObject;

und ich habe in viewDidLoad (CustomViewController)

    [self.label setText:self.myObject.someString];

Das funktioniert gut.

Aber ist es der richtige Weg? Sollte ich meinem CustomViewController eine benutzerdefinierte Init-Methode hinzufügen (oder überschreiben)? Wie initWithObject:? Ich kann nicht meine benutzerdefinierte Init-Methode anstelle von UIStoryboard instantiateViewControllerWithIdentifier: aufrufen, und ich bekomme keine Aufrufe von init oder initWithNibName.

Vielleicht sollte ich verwenden: - (id)initWithCoder:(NSCoder *)decoder

Bitte gib mir ein paar Ratschläge!

Vielen Dank!

50
Nicolas S

Der festgelegte Initialisierer für Ansichtscontroller in Storyboards lautet -initWithCoder:. Da die meisten Ansichts-Controller eines Storyboards über Segmente erstellt werden, wird der Status während -prepareForSegue:sender: normalerweise angezeigt.

Wenn Sie einen View-Controller wie in dem von Ihnen angegebenen Beispiel direkt vom Storyboard aus instantiieren, ist das von Ihnen ausgewählte Muster geeignet.

58
retainCount

Als weitere "Problemumgehung" für dieses Problem können Sie die Delegierung verwenden. Erstellen Sie ein Protokoll, das als Datenquelle für Ihre UIViewController-Unterklasse vom Storyboard aus verwendet wird. Passen Sie dieses Datenquellenprotokoll an, implementieren Sie es und verwenden Sie es direkt nach dem Laden Ihrer UIViewController-Unterklasse:

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

        //invoke your data source here
    }

Ich weiß ... ich mag das auch nicht, aber ...;)

0
Despotovic