Postanowiłem kontynuować mój pozostały projekt w Swift. Kiedy dodam niestandardową klasę (podklasę UIViewcontroller
) do mojego kontrolera widoku scenorysu i załaduję projekt, aplikacja nagle ulega awarii z następującym błędem:
błąd krytyczny: użycie niezaimplementowanego inicjatora „init (koder :)” dla klasy
To jest kod:
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.
}
*/
}
Proszę coś zasugerować
źródło
init(style: UITableViewStyle) { super.init(style: style) // Custom initialization }
Dlaczego możemy mieć dwie funkcje init? I jakikolwiek pomysł, dlaczego Apple domyślnie nie zawiera drugiego inicjalizacji?fatalError( "init(coder:) has not been implemented")
zatrzymała moją aplikację.Inną opcją oprócz @ 3r1d jest usunięcie następującej metody init z klasy:
Włączenie tej metody init zapobiega dziedziczeniu przez podklasę klasy po
init(coder aDecoder: NSCoder!)
swojej superklasie. Nie uwzględniając go, twoja klasa odziedziczy oba.Uwaga: aby uzyskać więcej informacji, zobacz sesję 403 WWDC 2014 „Intermediate Swift” około godziny 33:50.
źródło
init
metod. Twoja klasa podrzędna odziedziczy je po superklasie. Nadal możesz zadzwonić,self.init()
co spowoduje wykonanie super wersji.Dla osób, które mają ten sam problem ze swift
UICollectionViewCells
, dodaj kod, który @ 3r1d zasugerował do twojejUICollectionViewCell
klasy niestandardowej, a nie do kontrolera widoku:źródło
Dla tych, którzy potrzebują kodu w Swift:
[Edytuj] To było dla starszej wersji Swift. Prawdopodobnie już nie działa.
źródło
Miałem ten problem w komórce programmatic collectionView i mimo że operator pyta o vc, nadal wylądowałem na tym pytaniu podczas wyszukiwania odpowiedzi. Dla mnie problem polegał na tym, że miałem
wdrożone, więc pierwsza odpowiedź nie zadziałała. To, czego nie miałem w komórce, to inicjator:
Po dodaniu błąd zniknął
źródło
Zamiast dodawać metody poprawiające działanie mechanizmu wewnętrznego, zdecydowałbym się zdefiniować moje atrybuty jako @lazy i zainicjować je bezpośrednio w zakresie klasy.
źródło
?
.