Swift 3 - ошибка SIGABRT - numberOfComponentsInPickerView:]: нераспознанный селектор отправлен на экземпляр

Только что обновился до Swift 3 и xCode 8 Beta 4.

После исправления всех проблем с кодом у меня теперь есть проект без ошибок, но он выдает ошибку SIGABRT при нажатии одной конкретной кнопки на моем переднем экране.

Я уверен, что это связано с элементом UIPickerView на целевой странице, поскольку я удалил, проверил и заново добавил все сегменты и выпуски, чтобы убедиться, что с этой стороны все ясно.

Консоль показывает следующее:

2016-08-02 18: 59: 46.607 ForceIt! [38735: 2895259] - [ForceIt_.DirectoryViewController numberOfComponentsInPickerView:]: нераспознанный селектор, отправленный экземпляру 0x7fcd68c0c210 2016-08-02 18:59:46.618 ForceIt![38735] 2895 ** Завершение работы приложения из-за необработанного исключения "NSInvalidArgumentException", причина: '-[ForceIt_.DirectoryViewController numberOfComponentsInPickerView:]: нераспознанный селектор, отправленный экземпляру 0x7fcd68c0c210'

Код из соответствующего viewcontroller выглядит следующим образом:

import UIKit

var forceSelectedForTabView = String()
var forceSelectedPositionInArray = Int()

class DirectoryViewController: UIViewController, UIPickerViewDelegate {


    @IBOutlet weak var forcePicker: UIPickerView!
    @IBOutlet weak var selectedContactLabel: UILabel!
    @IBOutlet weak var selectedPhoneTextView: UILabel!
    @IBOutlet weak var selectedWebsiteTextView: UILabel!

    //function for the number of columns in the picker
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    //function counting the array to give the number of rows in the picker
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return forcePickerData.count
    }

    //function displaying the array rows in the picker as a string
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return forcePickerData[row]

    }

    //function allowing the font and colour of the picker to be changed
    func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
        let titleData = forcePickerData[row]
        let myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Verdana", size: 25.0)!,NSForegroundColorAttributeName:UIColor.black])
        return myTitle
    }

    //function returning the selected row from the picker
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

        forceSelectedForTabView = String(forcePickerData[row])
        forceSelectedPositionInArray = forcePickerData.index(of: forcePickerData[row])!


        self.selectedContactLabel.text = issiData[Int(forcePickerData.index(of: forcePickerData[row])!)]


        self.selectedPhoneTextView.text = phoneData[Int(forcePickerData.index(of: forcePickerData[row])!)]


        self.selectedWebsiteTextView.text = websiteData[Int(forcePickerData.index(of: forcePickerData[row])!)]

    }
}

2 ответа

numberOfComponentsInPickerView: это метод, объявленный в UIPickerViewDataSource, но твой DirectoryViewController не хватает UIPickerViewDataSource в соответствующем списке протоколов.

Измените заголовок класса следующим образом:

class DirectoryViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

Без этого Свифт не может разоблачить numberOfComponentsInPickerView: из метода numberOfComponents(in:),

Мне удалось исправить эту проблему, удалив весь предыдущий код и снова вставив методы из библиотеки кода. В новом коде не было ничего особенного, но, похоже, это было принято.

Все снова хорошо - возможно, я только что разозлил ошибку во время процесса обновления.

Другие вопросы по тегам