У меня есть Таблица, где у меня есть 3 отдельных MVC. Первый MVC - это UITableView
, где я могу искать местоположение, и он будет отображать прогноз на 10 дней. Второй MVC также UITableView
хранит мои любимые места. Я могу нажать на местоположение, и оно принесет мне еще UITableView
, который отображает прогноз на 10 дней точно так же, как первая панель вкладок. Однако я получаю "Поток 1: Неустранимая ошибка: неожиданно обнаружил, что nil при развертывании необязательного значения" Я использую настраиваемую ячейку прототипа, как и первый вид панели вкладок, и она прекрасно работает там.
Код для моей первой панели вкладок 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")
}