2 Stimmen

Wenn initWithCoder überschrieben wird, ist es immer notwendig, [super initWithCoder: coder] aufzurufen.

In diesem Code lade ich einen View Controller (und die dazugehörige View) aus einer .xib:

-(id)initWithCoder:(NSCoder *)coder
    {
    // add custom initialisation code here
    [super initWithCoder:coder];
    return self;
    }

Dies funktioniert erfolgreich, aber ich verstehe nicht wirklich, was die Zeile [super initWithCoder:coder] erreicht wird. Ist das Initialisieren meiner View Controller, nachdem meine Ansicht initialisiert wurde?

Bitte seien Sie bei Ihren Erklärungen so deutlich wie möglich. Vielen Dank.

0 Stimmen

Nur fürs Protokoll, falls Sie neu in diesem Bereich sind. (1) SOMETIMES (nicht immer) Sie zufällig wollen, um etwas zum "Setup" einer Klasse hinzufügen , wenn sie gestartet wird. (2) IF Wenn Sie das tun müssen, dann tun Sie es mit einem Code wie dem obigen. Beachten Sie jedoch, dass (3) der obige Code eigentlich gar nichts tut. Tatsächlich ist er ganz einfach nichts weiter als ein BEISPIEL, WAS SIE TUN WÜRDEN für diese besondere Art von Klasse, wenn Sie der betreffenden Klasse "Einrichtungscode hinzufügen" müssten. (Tatsächlich würden Sie "Ihren neuen Einrichtungscode kurz vor Zeile 3 einfügen".) Macht das Sinn?!)

3voto

Brandon Bodnar Punkte 8173

Ihre Klasse ist eine Unterklasse von UIViewController . Der Aufruf teilt Ihrer Superklasse ( UIViewController ), um die erforderlichen Schritte auszuführen, damit Sie Ihre Init-Schritte durchführen können. Dies wäre das Einrichten aller Eigenschaften, die die UIViewController die Bereitstellung oder Registrierung von Benachrichtigungen, dass die UIViewController seine Arbeit tun muss.

Fast immer, wenn Sie eine Methode der Superklasse überschreiben, wird vorgeschlagen, die Methode der Superklasse zusätzlich zu den erforderlichen Schritten aufzurufen.

Bearbeiten: Auch wenn Sie nicht brauchen, um etwas in einer Methode der Superklasse bietet zu tun, können Sie einfach weglassen und die Superklasse Methode wird stattdessen verwendet werden. In diesem Fall würde ich nicht die initWithCoder: Methode, es sei denn, es gibt einen Code, den Sie zusätzlich zu dem von Ihnen gezeigten ausführen müssen.

0 Stimmen

Nur um klar zu sein, Interface Builder ist automatisch meine UIView-Klasse von UIViewController subclassing, wenn ich ein UIView-Objekt zu der UIViewController.xib hinzufügen? Ich sehe, dass, wenn ich initWithCoder von meinem UIView benutzerdefinierte Klasse ausschließen alles auch normal lädt, das war ein nützlicher Tipp.

0 Stimmen

Eine Instanz einer UIView-Subklasse wird nur erzeugt, wenn das UI View-Objekt in der .xib mit dem Subklassennamen im Identity Inspector in IB (unter Custom Class) konfiguriert ist.

0 Stimmen

Lucas - lol danke, der war gut :) (fett ist leicht falsch zu interpretieren, richtig! :) )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X