🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1092閲覧

Index out of rangeのエラー

tatsu757

総合スコア12

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/09/12 07:00

前提・実現したいこと

ToDoアプリにて、TableViewにテキストを反映させる際にトラブルが起きる。
Index out of rangeのエラーの解消

発生している問題・エラーメッセージ

Index out of range

該当のソースコード

swift

1import UIKit 2 3class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UINavigationControllerDelegate { 4 5 @IBOutlet var tableView: UITableView! 6 7 //todoを入れる配列 8 9 var array = [String]() 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 tableView.delegate = self 14 tableView.dataSource = self 15 16 17 } 18 19 20 21 22 //セクションの数を指定 23 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 24 25 return 1 26 } 27 28 29 30 //生成したセルを順番に表示 31 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 32 33 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 34 //Table View CellのidentifireをCellとする 35 36 cell.textLabel?.text = array[indexPath.row] 37 cell.layer.backgroundColor = UIColor.clear.cgColor 38 return cell 39 } 40 41 42 //新規アイテム追加 43 @IBAction func add(_ sender: Any) { 44 45 var textField = UITextField() 46 47 let alert = UIAlertController(title: "新規作成", message: "", preferredStyle: .alert) 48 49 //現在の配列を取り出す 50 if (UserDefaults.standard.object(forKey: "todo") != nil){ 51 array = UserDefaults.standard.object(forKey: "todo") as! [String] 52 } 53 54 let action = UIAlertAction(title: "タスクを追加", style: .default) { (action) in 55 56 //既存の配列にテキストを追加して保存 57 self.array.append(textField.text!) 58 UserDefaults.standard.set(self.array, forKey: "todo") 59 self.tableView.reloadData() 60 } 61 62 63 alert.addTextField { (alertTextField) in 64 alertTextField.placeholder = "新しいアイテム" 65 textField = alertTextField 66 67 } 68 69 alert.addAction(action) 70 present(alert, animated: true, completion: nil) 71 72 73 } 74 75 76 77 //cellの高さ 78 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 79 return 70 80 } 81 82 83 //cellが消されたら 84 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { 85 if editingStyle == .delete{ 86 87 //対応する配列を消す 88 array.remove(at: indexPath.row) 89 90 //新しくえデータをセットし直す 91 UserDefaults.standard.set(array, forKey: "todo") 92 93 //tableViewを更新 94 tableView.reloadData() 95 } 96 } 97 98 99} 100 101

試したこと

二つのToDoアプリを自分で切り貼りしている間に繋がりがわからなくなってきました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

return 1 }

のreturn 1はreturn array.countじゃないでしょうかね?

投稿2019/09/12 07:21

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問