Ios Быстрая фатальная ошибка: использование нереализованного инициализатора 'init()'
Я очень стараюсь, посмотрел на каждый похожий вопрос, относящийся к этой проблеме, на StackOverflow и пробовал их безрезультатно.
class TimeLineTableViewController: UITableViewController,
UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var timelineData = [PFObject]()
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
self.loadData()
}
@IBAction func loadData(){
timelineData.removeAll(keepCapacity: false)
var findTimelineData:PFQuery = PFQuery(className:"timelineMessages")
findTimelineData.findObjectsInBackgroundWithBlock
{
(objects:[AnyObject]! , error:NSError!) -> Void in
if error == nil
{
self.timelineData = objects.reverse() as [PFObject]
//let array:NSArray = self.timelineData.reverseObjectEnumerator().allObjects
// self.timelineData = array as NSMutableArray
self.tableView.reloadData()
}
}
}
override func viewDidAppear(animated: Bool) {
var footerView:UIView = UIView(frame: CGRectMake(0, 0, self.view.frame.size.width, 50))
self.tableView.tableFooterView = footerView
var logoutButton:UIButton = UIButton.buttonWithType(UIButtonType.System) as UIButton
logoutButton.frame = CGRectMake(20, 10, 50, 20)
logoutButton.setTitle("Logout", forState: UIControlState.Normal)
logoutButton.addTarget(self, action:"logout:", forControlEvents: UIControlEvents.TouchUpInside)
footerView.addSubview(logoutButton)
}
Чтобы уточнить, timelineTableViewController имеет один класс, который наследует MessageTableCell. Это также часть проекта, который я включил в код Objective-C, поэтому это комбинация как Swift, так и ObjC. Я запускаю оба проекта (быстрый и автономный) самостоятельно, и они работают нормально; это только когда я пытаюсь запустить его вместе, они испортили. Какие-либо предложения? Для меня это полная потеря.
Ответы
Ответ 1
"В отличие от подклассов в Objective-C подклассы Swift по умолчанию не наследуют свои инициализаторы суперкласса."
Наследование автоматического инициализатора
- Правило 1:
Если ваш подкласс не определяет какие-либо назначенные инициализаторы, он автоматически наследует все его инициализаторы, назначенные суперклассам.
- Правило 2:
Если ваш подкласс обеспечивает реализацию всех его инициализаторов, назначенных суперклассам, либо путем наследования их в соответствии с правилом 1, либо путем предоставления пользовательской реализации как части определения, то он автоматически наследует все инициализаторы удобства суперкласса.
Отрывок из: Apple Inc. "Быстрый язык программирования". интерактивные книги. https://itun.es/tw/jEUH0.l
Поскольку вы переопределили init(coder aDecoder: NSCoder)
, TimeLineTableViewController
не будет иметь init()
initiailzer.
Вы можете обеспечить реализацию всех своих назначенных суперклассами инициализаторов, таких как
override init() {
super.init()
}
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
или просто удалите реализацию init(coder aDecoder: NSCoder)
.