Saya memutuskan untuk melanjutkan proyek saya yang tersisa dengan Swift. Ketika saya menambahkan kelas khusus (subclass of UIViewcontroller
) ke controller tampilan storyboard saya dan memuat proyek, aplikasi tiba-tiba crash dengan kesalahan berikut:
kesalahan fatal: penggunaan inisialisasi initializer 'init (coder :)' yang tidak diterapkan untuk kelas
Ini adalah kode:
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.
}
*/
}
Tolong sarankan sesuatu
sumber
init(style: UITableViewStyle) { super.init(style: style) // Custom initialization }
Mengapa kita bisa memiliki dua fungsi init? Dan tahu mengapa Apple tidak memasukkan init ke-2 secara default?fatalError( "init(coder:) has not been implemented")
menghentikan aplikasi saya.Opsi lain selain @ 3r1d adalah untuk menghapus metode init berikut dari kelas Anda:
Termasuk metode init, mencegah sub class mewarisi
init(coder aDecoder: NSCoder!)
dari super class-nya. Dengan tidak memasukkannya, kelas Anda akan mewarisi keduanya.Catatan: Lihat WWDC 2014 Sesi 403 "Intermediate Swift" di sekitar tanda 33:50 untuk detail lebih lanjut.
sumber
init
metode yang ditunjuk . Kelas anak Anda akan mewarisinya dari kelas super. Anda masih dapat meneleponself.init()
yang akan menjalankan versi super.Untuk orang-orang yang memiliki masalah yang sama dengan swift
UICollectionViewCells
, tambahkan kode yang disarankan @ 3r1d keUICollectionViewCell
kelas khusus Anda dan bukan ke View Controller:sumber
Bagi yang membutuhkan kode di Swift:
[Sunting] Ini untuk versi Swift yang lebih lama. Mungkin tidak berfungsi lagi.
sumber
Saya punya masalah ini dalam sel koleksiView terprogram dan meskipun op bertanya tentang vc saya masih mendarat pada pertanyaan ini ketika mencari jawaban. Bagi saya masalahnya adalah saya memang punya
diimplementasikan sehingga jawaban teratas tidak bekerja. Apa yang tidak saya miliki di dalam sel adalah inisialisasi:
Setelah saya menambahkannya kesalahan itu hilang
sumber
Daripada menambahkan beberapa metode untuk membuat mekanisme internal berfungsi dengan baik, saya akan pergi dengan mendefinisikan atribut saya sebagai @ lazy dan menginisialisasi mereka tepat di ruang lingkup kelas.
sumber
?
.