2016-08-02 4 views
0

Просто обновлено до Swift 3 и Xcode 8 Beta 4.Swift 3 - SIGABRT ошибка - numberOfComponentsInPickerView]: непризнанный селектор направил к экземпляру

После исправления всех проблем коды теперь у меня есть свободный проект об ошибке, но он бросает ошибка 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: 2895259] *** Нагрузочного приложения из-за неперехваченного исключением '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])!)] 

    } 
} 
+0

Где вы устанавливаете 'forcePickerData' равным чему-то? Похоже, проблема заключается в методе 'numberOfRowsInComponent' – Asdrubal

+0

Возвращает счетчик массива, который предоставляет данные для сборщика. Массив расположен чуть ниже конца общего кода. Он отлично работает под Xcode 7, однако он доказывает кошмар под Xcode 8 ... –

+0

В 'numberOfRowsInComponent' вызов' print (forcePickerData.count) 'является правильным результатом? – Asdrubal

ответ

5

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

Изменить класс заголовка, как:

class DirectoryViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 

Без этого Swift не может подвергать numberOfComponentsInPickerView: от метода numberOfComponents(in:).

1

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

Все хорошо снова - думаю, я мог бы просто рассердить ошибку во время процесса обновления.