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'
aufrufenDer Convenience-Initialisierer für 'CustomActionSheet' muss delegieren (mit 'self.init') anstatt an einen Superklasseninitialisierer (mit 'super.init') zu ketten
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)
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!
Tags und Links objective-c ios swift uiview custom-controls