Überschreibe init () in einer CustomUIView-Crash-App (EXC_BAD ACCESS)

8

Ich versuche, eine UIView in Swift zu subklassen.

Wie immer die App abstürzt (EXC_BAD_ACCESS), wenn der Initialisierer aufgerufen wird

Hier ist die Klasse

%Vor%

So nenne ich es

%Vor%

Es wurde versucht, self.init () durch super.init () zu ersetzen, aber es wird nicht kompiliert.

Fehlermeldung:

  

Muss einen designierten Initialisierer der Oberklasse 'UIView'

aufrufen      

Der Convenience-Initialisierer für 'CustomActionSheet' muss delegieren (mit 'self.init') anstatt an einen Superklasseninitialisierer (mit 'super.init') zu ketten

    
JayVDiyk 12.06.2015, 08:27
quelle

1 Antwort

7

Sie müssen Ihr UIVIew mit einem Frame initialisieren, selbst wenn es Null ist, müssen Sie auch das Init überschreiben, damit Sie Ihre Variablen vor dem Call-Supper initialisieren können:

%Vor%

Beachten Sie, dass ich den anderen Convenience-Initialisierer lösche, den Sie erstellen, da alle Ihre Variablen privat sind. Sie brauchen diesen Initialisierer nicht, aber wenn Sie einen leeren Initialisierer haben möchten, können Sie einfach hinzufügen als:

%Vor%

Auch die Größe des Rahmens kann übergeben oder repariert werden, Sie müssen nur die entsprechenden Änderungen vornehmen und init(frame: yourFrame)

aufrufen

Regeln für die Initialisierung von Apple-Dokumentation :

  

Regel 1 Ein designierter Initialisierer muss einen designierten Initialisierer aufrufen   von seiner unmittelbaren Oberklasse.

     

Regel 2 Ein Komfortinitialisierer muss einen anderen Initialisierer aufrufen   die gleiche Klasse.

     

Regel 3 Ein Convenience-Initialisierer muss letztendlich einen designierten Benutzer aufrufen   Initialisierer.

     

Ein einfacher Weg sich daran zu erinnern ist:

     

Bezeichnete Initialisierer müssen immer delegieren. Bequemlichkeit   Initialisierer müssen immer delegieren.

Ich hoffe, das hilft dir!

    
Icaro 12.06.2015, 09:09
quelle