UIView numberOfComponentsInPickerView нераспознанный селектор, отправленный экземпляру

Я знаю, что есть много вопросов по этой проблеме, но я все еще не могу заставить работать свой конкретный код. Извините, если это вопрос новичков. Это буквально весь мой код ниже. Если я сломаю viewDidLoad, мой делегат и dataSource будут запускать самостоятельно без проблем. Исключение происходит сразу после этого события до того, как какая-либо из реализованных функций UIPickerViewDataSource будет запущена. Я включил отладку ниже.

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
    var listingTypesList:[String:Int] = [
        "Bench": 0,
        "Squat": 1,
        "Dead": 2
    ]

    @IBOutlet weak var listingType: UIPickerView!

    override func viewDidLoad() {
        super.viewDidLoad()

        listingType.delegate = self
        listingType.dataSource = self
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return listingTypesList.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        var listingTypesArray = Array(listingTypesList.keys)
        return listingTypesArray[row]
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

2017-10-03 20:41: 36.038930-0400 Тренажер по поднятию [328: 19327] - [UIView numberOfComponentsInPickerView:]: неопознанный селектор отправлен в экземпляр 0x107811de0 03.10.2017 20:41: 36.041055-0400 Тренажер по поднятию [328: 19327 ] * Завершение работы приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: '- [UIView numberOfComponentsInPickerView:]: нераспознанный селектор, отправленный в экземпляр 0x107811de0' * Стек вызовов первого вызова: (0x181697d38 0x180bac528 0x1816a51f8d6x18ec5280x1816a51f8d0x18e6e0x18e0x18e6c0e0x18e0x18e0x18ec0e0x18e0e0x18e0x18e6ecf0c5 0x18acf8504 0x18acf85e4 0x18aaa476c 0x18aaa445c 0x18aaa3918 0x18aaa3770 0x18aaaf39c 0x18aaae5c4 0x18aaab608 0x1a03c04fc 0x18ab1b068 0x18ad0a954 0x18ad0f6e4 0x18af9d454 0x18b26d1f0 0x18af9d0b8 0x18af9d928 0x18b7066e8 0x18b70658c 0x18b4829c0 0x18b617fc8 0x18b482870 0x18b26c850 0x18ad0de28 0x18b1116ec 0x183d39768 0x183d42070 0x105a6945c 0x105a75b74 0x183d6da04 0x183d6d6a8 0x183d6dc44 0x181640358 0x1816402d8 0x18163fb60 0x18163d738 0x18155e2d8 0x1833eff84 0x18ab0b880 0x1049993ac 0x 18108256c) libc ++ abi.dylib: завершение с неперехваченным исключением типа NSException


person David Choi    schedule 03.10.2017    source источник
comment
В вашем коде нет проблем, он работает отлично, вы можете прикрепить журнал, пожалуйста. Так легко отлаживать   -  person Jaydeep Vyas    schedule 03.10.2017
comment
Не могли бы вы проверить, связан ли правильный UIPickerView со свойством listType.   -  person Ruchira Randana    schedule 03.10.2017
comment
@RuchiraRandana, я думаю, с подключением нет проблем, как он говорит If I break inside viewDidLoad my delegate and dataSource sets to self run without issue.   -  person Jaydeep Vyas    schedule 03.10.2017
comment
Некоторые другие сталкивались с аналогичными проблемами: попробуйте этот stackoverflow.com/a/38747910/968904   -  person JonEasy    schedule 03.10.2017
comment
не связаны, но могут быть полезны: ключи из словаря Swift не гарантируются быть в любом конкретном порядке, поэтому создание listingTypesArray при каждом вызове titleForRow может привести к неожиданному поведению. Лучше создать listingTypesArray в вашем методе viewDidLoad или свойстве объекта.   -  person Michael Dautermann    schedule 03.10.2017
comment
@RuchiraRandana, когда я выбираю свой UIPickerView, а затем просматриваю инспектор подключений, я вижу свое свойство listType.   -  person David Choi    schedule 04.10.2017
comment
Обнаружена проблема. Я использую одно из учебных пособий udemy iOS, и в нем я управлял перетаскиванием из инспектора соединений, делегата и источника данных на неотобранный элемент управления. Как только я их удалил, все заработало. Извините за неприятности. Спасибо.   -  person David Choi    schedule 04.10.2017


Ответы (1)


У меня тоже была такая же проблема, но я решил ее, используя приведенный ниже код:

override func viewDidLoad() {
    super.viewDidLoad()
    currencyPicker.delegate = self
    currencyPicker.dataSource = self
   
}
person Annkit    schedule 22.06.2020