Swift: вызывается только один метод TableView - PullRequest
0 голосов
/ 08 декабря 2018

Когда я запускаю приложение, вызывается только метод numberOfRowsInSection().Поэтому я помещаю определенное количество точек останова для каждого метода, но я обнаружил, что numberOfRowsInSection() вызывается 4-5 раз, а остальная часть метода не вызывается.Вот мой код.

import UIKit


var arrSearch = [[String:Any]]()
class RecentSearchViewController: CustomNavigationViewController {
    @IBOutlet var tblSearch: UITableView!

    var searchBusVC:SearchBusViewController?
    override func viewDidLoad() {
        super.viewDidLoad()

          if let arr = UserDefault["SearchTo"]{ 
          arrSearch.append(arr as! [String:Any])
        } 
        tblSearch.reloadData()
    }

extension RecentSearchViewController: UITableViewDataSource , UITableViewDelegate {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrSearch.count
    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 200
    }
    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return 100
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "RecentCell") as! RecentCell
        cell.selectionStyle = .none
        let dict = arrSearch[indexPath.row]
        cell.lblFrom.text = (dict["From"] as! String)
        cell.lblTo.text = (dict["To"] as! String)
        let strDate = Utill.getStringFromDate("EEE MMM dd ,yyyy", date: (dict["fromdate"] as! Date))
        cell.lblDate.text = strDate
        return cell
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let searchvc = self.searchBusVC {
            searchvc.setRecentSearch(dict: arrSearch[indexPath.row])

        }
        self.navigationController?.popViewController(animated: true)
    }

}


class RecentCell: UITableViewCell {
    @IBOutlet var lblFrom: UILabel!
    @IBOutlet var lblTo: UILabel!
    @IBOutlet var lblDate: UILabel!

}

Я пробовал много раз, но у меня это не сработает.Даже в консоли нет ошибки отображается.Есть ли проблема с кодом?

1 Ответ

0 голосов
/ 08 декабря 2018

Если вызывается numberOfRowsInSection, но нет других методов UITableViewDataSource, это должно означать, что numberOfRowsInSection возвращает 0. И это должно означать, что arrSearch пусто.Также эта часть кода

if let arr = UserDefault["SearchTo"] { 
      arrSearch.append(arr as! [String:Any])
}

должна быть переписана.Поскольку вы приводите результат подстрочного индекса, вы можете сделать это как часть if let, что также сделает его более безопасным, если результат не будет иметь [String:Any] тип

if let arr = UserDefault["SearchTo"] as? [String:Any] { 
      arrSearch.append(arr)
}

Короче говоря,по-видимому, UserDefault["SearchTo"] возвращает nil

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...