私は現在、プログラムを完全にプログラム的に構築する方法を学んでおり、その過程で少し壁を打っています。Swiftを使ってテーブルビュー内でUITextViewを反復する
私のアプリは、ユーザーが記入できるかなりシンプルなフォームになり、最後に情報を含むPDFが生成されます。基本的な情報については、私はUITextfieldsのセットを含むテーブルビューを持っており、それらを反復し、データを文字列の配列に抽出することに問題はありません。 次のセクションでは、より多くのテキストを入力する必要があったため、テーブルビュー内でUITextviewを使用しました。私ができるようにしたいのは、入力されたテキストを抽出し、顧客オブジェクトを作成するために使用される文字列の配列に保存することです。
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)
}
}
}
}
しかし、これを実行すると、私はエラーメッセージがこの行を「オプションの値をアンラップしながら、予想外にnilを見つけ」、それは特にハイライトを取得:次のようにこれを実行するコードがある
let thisCell = secondTableView.cellForRow(at: indexPath as IndexPath) as! mySecondCell
このコードはUITextfieldsをどのように反復するのかとほとんど同じですが、変更されたものはすべて変数に添付されています。 また、私はUITextviewsを記入しないとUIAlertControllerが表示されますが、プレースホルダを削除してUITextviewsを記入すると問題があるようです。 これはなぜ起こっているかについて誰かが考えていますか?私は、必要に応じて、より多くのコードを提供することができます。
デバッガは、secondTableViewに、渡した行にセルが含まれていないことを伝えています。 secondTableViewの行数を確認すると役立ちます。 – ystack
私はデバッガで試したところ、セクション0の4行を期待どおりに返しています。行は間違いなくそこにあるので、私のforループは何とか1つを欠場することができますか? – EtherCode
'mySecondCell'はインスタンスであり、クラスではありません。あなたはクラスの型としてセルを取得する必要があります。 'let thisCell = secondTableView.cellForRow(at:IndexPathとしてのindexPath)を! MyCellSubclass'、またはガード 'guardを使用する方が良いでしょうか?thisCell = secondTableView.cellForRow(at:IndexPathとしてindexPath)を? mySecondCell else {return} ' –