Ich beschloss, mein verbleibendes Projekt mit Swift fortzusetzen. Wenn ich UIViewcontroller
meinem Storyboard View Controller die benutzerdefinierte Klasse (Unterklasse von ) hinzufüge und das Projekt lade, stürzt die App plötzlich mit dem folgenden Fehler ab:
Schwerwiegender Fehler: Verwendung des nicht implementierten Initialisierers 'init (coder :)' für die Klasse
Dies ist ein Code:
import UIKit
class TestViewController: UIViewController {
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
// Custom initialization
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// #pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
}
Bitte schlagen Sie etwas vor
quelle
init(style: UITableViewStyle) { super.init(style: style) // Custom initialization }
Warum können wir zwei Init-Funktionen haben? Und eine Idee, warum Apple die 2. Init standardmäßig nicht enthält?fatalError( "init(coder:) has not been implemented")
meine App angehalten hat.Eine andere Option neben @ 3r1d ist, stattdessen die folgende init-Methode aus Ihrer Klasse zu entfernen:
Durch das Einschließen dieser init-Methode wird verhindert, dass die Unterklasse die
init(coder aDecoder: NSCoder!)
von ihrer Superklasse erbt . Wenn Sie es nicht einschließen, erbt Ihre Klasse beide.Hinweis: Weitere Informationen finden Sie in der WWDC 2014-Sitzung 403 "Intermediate Swift" bei etwa 33:50.
quelle
init
Methoden angeben. Ihre Kinderklasse wird sie von der Superklasse erben. Sie können immer noch anrufen,self.init()
welche die Super-Version ausführen wird.UICollectionViewCells
Fügen Sie für Benutzer mit dem gleichen Problem mit swift den von @ 3r1d vorgeschlagenen Code zu Ihrer benutzerdefiniertenUICollectionViewCell
Klasse und nicht zum View Controller hinzu:quelle
Für diejenigen, die den Code in Swift benötigen:
[Bearbeiten] Dies war für eine ältere Version von Swift. Funktioniert möglicherweise nicht mehr.
quelle
Ich hatte dieses Problem in einer programmatischen collectionView-Zelle und obwohl die Operation nach einem VC fragt, bin ich bei der Suche nach einer Antwort immer noch auf diese Frage gestoßen. Für mich war das Problem, das ich hatte
implementiert, so dass die Top-Antwort nicht funktioniert hat. Was ich nicht in der Zelle hatte, war der Initialisierer:
Sobald ich es hinzugefügt habe, ist der Fehler verschwunden
quelle
Anstatt einige Methoden hinzuzufügen, damit der interne Mechanismus einwandfrei funktioniert, würde ich meine Attribute als @lazy definieren und sie direkt im Klassenbereich initialisieren.
quelle
?
.