Быстрое падение при развертывании UILabel в UITableView с пользовательской ячейкой - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть Таблица, где у меня есть 3 отдельных MVC. Первый MVC - это UITableView, где я могу искать местоположение, и он будет отображать прогноз на 10 дней. Второй MVC также UITableView хранит мои любимые места. Я могу нажать на местоположение, и оно принесет мне еще UITableView, который отображает прогноз на 10 дней точно так же, как первая панель вкладок. Однако я получаю "Поток 1: Неустранимая ошибка: неожиданно обнаружил, что nil при развертывании необязательного значения" Я использую настраиваемую ячейку прототипа, как и первый вид панели вкладок, и она прекрасно работает там. enter image description here

Код для моей первой панели вкладок mvc выглядит так:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "WeatherDataCell", for: indexPath)

let weatherCell = timeSeries[indexPath.row]
if let wc = cell as? WeatherTableViewCell {
    wc.timeSeries = weatherCell
}

return cell
}

Пользовательская ячейка прототипа выглядит примерно так:

class WeatherTableViewCell: UITableViewCell {

    @IBOutlet weak var WeatherImageView: UIImageView!
    @IBOutlet weak var WeatherTimeLabel: UILabel!
    @IBOutlet weak var WeatherTemperatureLabel: UILabel!
    @IBOutlet weak var WeatherWindLabel: UILabel!
    @IBOutlet weak var WeatherPrecipitationLabel: UILabel!

    var timeSeries : TimeSeries? {
        didSet {
            updateUI()
        }
    }

    func updateUI() {
        for parameters in timeSeries!.parameters {
        if parameters.name == "t" {
            let temperature = parameters.values[0]
            WeatherTemperatureLabel.text? = "\(temperature) °C" // <- works for the first MVC but crashes on the second MVC even though i can print out the temperature
        }
    }
}

Функция в секундах MVC в основном выглядит так же, как и первая, поэтому я не понимаю, почему она падает, у нее должны быть данные.

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "DetailedWeatherCell", for: indexPath) as! WeatherTableViewCell

let weatherCell = timeSeries[indexPath.row]        
let wc = cell
wc.timeSeries = weatherCell

return cell

}

добавлен дополнительный код для ясности (мой класс FavoriteDetailedTableViewController):

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.register(WeatherTableViewCell.self, forCellReuseIdentifier: "DetailedWeatherCell")
}

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018
  • 2 Viewcontrollers не могут повторно использовать ту же ячейку прототипа, которая была создана одним из двух viewcontrollers
  • WeatherTableViewCell не может иметь 2 макета в mvc1, mvc2
    => Вам необходимо создатьячейка вашего клиента в xib-файле и зарегистрируйте ячейку для повторного использования UITableViewCell.
0 голосов
/ 13 ноября 2018

Я думаю, вы забыли изменить идентификатор ячейки прототипа в FavoritedDetailedTableViewController.В этом TableViewController измените его на

enter image description here

, и он должен работать.

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

enter image description here

Также удалите эту строку из viewDidLoad

self.tableView.register(WeatherTableViewCell.self, forCellReuseIdentifier: "DetailedWeatherCell")
...