iOS loadNibNamed Verwirrung, was ist die beste Praxis?

Ich bin mit den meisten Vorgängen beim Erstellen eines XIB für meine eigene UIView-Unterklasse vertraut, aber bei mir funktioniert nicht alles ordnungsgemäß - es hängt hauptsächlich mit der Verknüpfung der IBOutlets zusammen. Ich kann sie dazu bringen, auf eine Art und Weise zu arbeiten, die wie ein Umweg aussieht.

Mein Setup ist folgendes:

Ich habe MyClass.h und MyClass.m. Sie haben IBOutlets für ein UIView (View genannt) und ein UILabel (MyLabel genannt). Ich habe die 'view'-Eigenschaft hinzugefügt, weil einige Online-Beispiele darauf hindeuten, dass Sie dies benötigen. Außerdem wurde ein Problem behoben, bei dem es zu einem Absturz kam, weil die view-Eigenschaft nicht gefunden wurde. Ich denke, nicht einmal in der übergeordneten Klasse von UIView .Ich habe eine XIB-Datei mit dem Namen MyClass.xib, und die benutzerdefinierte Klasse ihres Dateieigentümers ist MyClass, die vorab korrekt ausgefüllt wurde, nachdem meine .h- und .m-Dateien für diese Klasse vorhanden waren.

Meine Init-Methode ist, wo ich Probleme habe.

Ich habe versucht, die 'loadNibNamed'-Methode von NSBundle mainBundle zu verwenden und den Eigentümer auf' self 'zu setzen, in der Hoffnung, dass ich eine Instanz der Ansicht erstellen und die Ausgänge automatisch an die meiner Klasse anpassen würde (ich weiß wie man das macht und ich bin vorsichtig damit). Ich dachte dann, ich möchte "self" gleich der Unteransicht bei Index 0 in dieser Schreibfeder machen, anstatt dies zu tun

self = [super init];

oder so etwas.

Ich habe das Gefühl, dass ich hier etwas falsch mache, aber Online-Beispiele haben ähnliche Vorgänge in der init-Methode durchgeführt, aber sie weisen der view -Eigenschaft diese Unteransicht 0 zu und fügen sie als untergeordnetes Element hinzu - aber ist das nicht alles? zwei MyClass-Instanzen? Eine, die im Wesentlichen nicht mit IBOutlets verknüpft ist und die über loadNibNamed instanziierte untergeordnete MyClass enthält? Oder handelt es sich bestenfalls nicht um eine MyClass-Instanz mit einem zusätzlichen Vermittler-UIView, der alle IBOutlets enthält, die ich ursprünglich als direkte Kinder von MyClass haben wollte? Das ist etwas ärgerlich, wenn es darum geht, Dinge wie instanceOfMyClass.frame.size.width auszuführen, da es 0 zurückgibt, wenn das eingeführte untergeordnete UIView die von mir gesuchte tatsächliche Frame-Größe zurückgibt.

Ist das, was ich falsch mache, dass ich mit loadNibNamed in einer init-Methode herumspiele? Sollte ich so etwas mehr tun?

MyClass *instance = [[MyClass alloc] init];
[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:instance options:nil];  

Oder so?

MyClass *instance = [[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:nil options:nil] objectAtIndex:0]; 

Vielen Dank im Voraus für jede Hilfe.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage