В настоящее время я изучаю, как создавать приложения полностью программно, и в этом процессе нанесли немного стены.Итерация через UITextViews в виде таблицы с использованием Swift
Мое приложение будет довольно простой формой, которую пользователь может заполнить, и он будет генерировать PDF в конце, содержащем информацию. Для основной информации у меня есть табличное представление, содержащее набор полей UIText, и у них нет проблем с итерацией через них и извлечением данных в массив строк. Для следующего раздела пользователю нужно было ввести намного больше текста, поэтому я использовал UITextviews в виде таблицы. То, что я хочу сделать, это извлечь введенный текст и сохранить его в массив строк, который используется для создания объекта клиента. Код, который делает это следующим образом:
func createGoals() {
for section in 0..<secondTableView.numberOfSections {
for row in 0..<secondTableView.numberOfRows(inSection: section) {
let indexPath = NSIndexPath(row: row, section: section)
let thisCell = secondTableView.cellForRow(at: indexPath as IndexPath) as! mySecondCell
if thisCell.textview.text == "Enter Goals" {
print("NO CONTENT IN FIELD")
let ac = UIAlertController(title: "But...But...", message: "If you have no goals, how can you progress?!", preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
present(ac, animated: true)
break
} else {
print("I MADE IT")
print("\(thisCell.textview.text!)")
newClient.goalArray.append(thisCell.textview.text)
print(newClient.goalArray)
}
}
}
}
Но когда это работает, я получаю сообщение об ошибке «неожиданно нашел ноль в то время как разворачивание необязательного значения», и это особенно подчеркивает эту строку:
let thisCell = secondTableView.cellForRow(at: indexPath as IndexPath) as! mySecondCell
Этих код почти идентичен тому, как я успешно перебираю поля UITextfield, все, что было изменено, связано с переменными, и насколько я вижу, нет никаких опций. Также, если я не заполняю UITextviews, он покажет UIAlertController, это только кажется проблемой, когда я удаляю заполнитель и заполняю UITextviews. Есть ли у кого-нибудь идеи, почему это происходит? При необходимости я могу предоставить больше своего кода.
Отладчик сообщает вам, что secondTableView не содержит ни одной ячейки в строке, которую вы передали. Проверка подсчета строк secondTableView должна помочь. – ystack
Я только что пробовал в отладчике, и он возвращает 4 строки в разделе 0, который как и ожидалось. Строки определенно есть, так может ли мой цикл петух каким-то образом пропустить? – EtherCode
'mySecondCell' кажется экземпляром, а не классом. Вы должны получить ячейку как тип класса, то есть. 'let thisCell = secondTableView.cellForRow (at: indexPath как IndexPath) как! MyCellSubclass' или даже лучше использовать Guard 'guard, пусть thisCell = secondTableView.cellForRow (at: indexPath как IndexPath) как? mySecondCell else {return} ' –