我目前正在学习如何以编程方式完全构建应用程序,并在过程中遇到了一些问题。使用Swift在TableView中迭代UITextViews使用Swift
我的应用程序将会是一个非常简单的表单,用户可以填写它,并且会在包含信息的末尾生成PDF。对于基本信息,我有一个包含一组UITextfields的tableview,并且没有任何问题通过它们迭代并将数据提取到一个字符串数组中。 对于下一节,用户需要输入更多的文本,所以我在tableview中使用了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
这代码与我如何成功遍历UITextfields几乎完全相同,所有变化都是附加的变量,并且据我所见,没有可选项。 另外,如果我没有填写UITextviews,它将显示UIAlertController,它只是在我删除占位符并填写UITextviews时似乎有问题。 有没有人有任何想法,为什么发生这种情况?如果需要,我可以提供更多的代码。
调试器告诉你,secondTableView在你传递的行中不包含任何单元格。验证secondTableView的行数应该有所帮助。 – ystack
我刚刚在调试器中尝试过,并且它正在按照预期在部分0中返回4行。行肯定存在,那么我的for循环可能会错过一个? – EtherCode
mySecondCell似乎是一个实例,而不是一个类。您需要将单元格作为类类型即。 let thisCell = secondTableView.cellForRow(at:indexPath as IndexPath)as! MyCellSubclass'或甚至更好的使用警卫'警卫let thisCell = secondTableView.cellForRow(在:indexPath作为IndexPath)? mySecondCell else {return}' –