Я решил продолжить свой оставшийся проект со Swift. Когда я добавляю пользовательский класс (подкласс UIViewcontroller
) в контроллер представления раскадровки и загружаю проект, приложение внезапно завершает работу со следующей ошибкой:
фатальная ошибка: использование не реализованного инициализатора 'init (coder :)' для класса
Это код:
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.
}
*/
}
Пожалуйста, предложите что-нибудь
источник
init(style: UITableViewStyle) { super.init(style: style) // Custom initialization }
Почему у нас может быть две функции инициализации? И есть идеи, почему Apple не включает 2-й init по умолчанию?fatalError( "init(coder:) has not been implemented")
остановила мое приложение.Другой вариант, кроме @ 3r1d, - вместо этого удалить следующий метод init из вашего класса:
Включение этого метода init предотвращает наследование подкласса
init(coder aDecoder: NSCoder!)
от своего суперкласса. Не включая его, ваш класс унаследует оба.Примечание. Для получения более подробной информации см. Сессия 403 WWDC 2014 «Промежуточное стремительное движение» около отметки 33:50.
источник
init
методы. Ваш дочерний класс унаследует их от суперкласса. Вы все еще можете позвонить,self.init()
который выполнит супер версию.Для людей, имеющих ту же проблему с swift
UICollectionViewCells
, добавьте код, который @ 3r1d предложил для вашего пользовательскогоUICollectionViewCell
класса, а не для View Controller:источник
Для тех, кому нужен код в Swift:
[Править] Это было для более старой версии Swift. Возможно, больше не работает.
источник
У меня была эта проблема в программной ячейке collectionView, и хотя операционная система спрашивает о виртуальном канале, я все еще сталкиваюсь с этим вопросом при поиске ответа. Для меня проблема была у меня
реализовано так, что верхний ответ не сработал. В ячейке не было инициализатора:
Как только я добавил это, ошибка ушла
источник
Вместо того, чтобы добавлять некоторые методы для обеспечения нормальной работы внутреннего механизма, я бы пошел с определением моих атрибутов как @lazy и инициализировал их прямо в области видимости класса.
источник
?
.