Нераспознанный селектор, отправленный экземпляру для reloadData tableView после задержки - PullRequest
0 голосов
/ 25 марта 2020

мой tableView внутри collectionViewCell, когда я вызываю collectionViewCell.tableview.perforSelector (), мое приложение имеет вид cra sh и приводится ниже исключение.

Завершение работы приложения из-за невыполненного исключения «NSInvalidArgumentException», причина: '- [UITableView DataOnUI]: нераспознанный селектор, отправленный экземпляру 0x7ff267876600'

мое приложение содержит sh в этой строке: - "self.tblTopics? .Perform (Selector (" DataOnUI "), на: .main, с: nil, waitUntilDone: true)"

Код:

//****************************************************//
extension SelectedCategoriesCell: UITableViewDataSource, UITableViewDelegate {

    //----------------------------------------------
    func setUpTableView(){
        tblTopics?.rowHeight = UITableView.automaticDimension
        tblTopics?.estimatedRowHeight = 44
        tblTopics?.allowsMultipleSelection = true
        lcHeightOftblTopicsTable?.constant = 0
        setUpTableData()
    }

    //----------------------------------------------
    func setUpTableData(){
        tblTopics?.dataSource = self
        tblTopics?.delegate = self
        self.tblTopics?.reloadData()
        self.tblTopics?.perform(Selector("DataOnUI"), on: .main, with: nil, waitUntilDone: true)

    }

    func DataOnUI() {
        self.lcHeightOftblTopicsTable?.constant = self.tblTopics?.contentSize.height ?? 0
        self.tblTopics?.reloadData()
        self.layoutIfNeeded()
        self.setNeedsDisplay()
    }

    //----------------------------------------------
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrayAllTopic?.count ?? 0
    }

    //----------------------------------------------
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableView.automaticDimension
    }

    //----------------------------------------------
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if let cell = tableView.dequeueReusableCell(withIdentifier: TopicsCell.className, for: indexPath) as? TopicsCell {
            if let jsonObject = arrayAllTopic?[indexPath.row] {
                var topicModel = Model.ListAllCategories(json: jsonObject)
                cell.lblTopicTitle?.text = topicModel.name
                return cell
            }
        }
        return UITableViewCell()
    }

    //----------------------------------------------
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        var jsonData = arrayAllTopic?[indexPath.row]
            jsonData?[api.kisSelected] = true
        arrayAllTopic?[indexPath.row] = jsonData!
        print("\(arrayAllTopic)")

    }

    //----------------------------------------------
    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
         var jsonData = arrayAllTopic?[indexPath.row]
            jsonData?[api.kisSelected] = false
        arrayAllTopic?[indexPath.row] = jsonData!
        print("\(arrayAllTopic)")
    }


}

Спасибо за ваше предложение ..

1 Ответ

1 голос
/ 25 марта 2020

Прежде всего, никогда не записывайте имя селектора в виде строки: Selector("DataOnUI"). Вы не знаете, как это сделать, и даже если вы это сделаете, компилятор знает больше, чем вы. Используйте синтаксис #selector: #selector(DataOnUI).

Во-вторых, когда вы это сделаете, компилятор поможет вам, сказав, что func DataOnUI() нужна маркировка @objc.

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

...