J'ai décidé de continuer mon projet restant avec Swift. Lorsque j'ajoute la classe personnalisée (sous-classe de UIViewcontroller
) à mon contrôleur de vue storyboard et charge le projet, l'application se bloque soudainement avec l'erreur suivante:
erreur fatale: utilisation de l'initialiseur non implémenté 'init (coder :)' pour la classe
Ceci est un 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.
}
*/
}
Veuillez suggérer quelque chose
la source
init(style: UITableViewStyle) { super.init(style: style) // Custom initialization }
Pourquoi pouvons-nous avoir deux fonctions init? Et une idée de la raison pour laquelle Apple n'inclut pas le 2ème init par défaut?fatalError( "init(coder:) has not been implemented")
arrêté mon application.Une autre option en plus de @ 3r1d est de supprimer la méthode init suivante de votre classe:
L'inclusion de cette méthode init empêche la sous-classe d'hériter
init(coder aDecoder: NSCoder!)
de sa super classe. En ne l'incluant pas, votre classe héritera des deux.Remarque: Voir WWDC 2014 Session 403 «Intermediate Swift» à environ 33:50 pour plus de détails.
la source
init
méthodes désignées . Votre classe enfant les héritera de la super classe. Vous pouvez toujours appelerself.init()
qui exécutera la super version.Pour les personnes ayant le même problème avec swift
UICollectionViewCells
, ajoutez le code que @ 3r1d a suggéré à votreUICollectionViewCell
classe personnalisée et non au contrôleur de vue:la source
Pour ceux qui ont besoin du code dans Swift:
[Modifier] C'était pour une ancienne version de Swift. Peut-être ne fonctionne plus.
la source
J'ai eu ce problème dans une cellule de collectionView programmatique et même si l'opération pose des questions sur un vc, j'ai toujours atterri sur cette question lors de la recherche d'une réponse. Pour moi, le problème était que j'avais
mis en œuvre pour que la réponse principale ne fonctionne pas. Ce que je n'avais pas dans la cellule était l'initialiseur:
Une fois que je l'ai ajouté, l'erreur est partie
la source
Plutôt que d'ajouter des méthodes pour que le mécanisme interne fonctionne correctement, je choisirais de définir mes attributs comme @lazy et de les initialiser directement dans la portée de la classe.
la source
?
.