質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Xcode

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

Swift

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

Q&A

解決済

2回答

458閲覧

カスタムセルにすると落ちる

sunglass

総合スコア303

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/06/27 12:08

編集2020/06/28 06:12

Cloud Firestoreから自作のidを取得してカスタムセルに渡しています。
idは「1, 2, 3, 4...」となってカウントアップする仕組みです。

Buildしてカウントアップすると Thread 1: Fatal error: Index out of range で落ちます。。

中身を確認すると問題ないように感じるのですが・・・

コード // 両方試しました。 var numStr2: [Int] = [] var numStr2 = [Int](repeating: 0, count: 100) // セルの中身 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = table.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomCell // Int to String cell.Number.text = "(id[indexPath.row])" // ここでエラー出ます。 cell.Title.text = item[indexPath.row] return cell } ... print(self.id) // 「1, 2, 3, 4...」

【追記】

cellForRowAt内でprintすると以下のデータが出てきます。

print(self.id) print(indexPath.row) 0 // cell連番 [1, 2, 3, 4, 5, 6, 7, 8, 9] // 自作ID 1 [1, 2, 3, 4, 5, 6, 7, 8, 9] 2 [1, 2, 3, 4, 5, 6, 7, 8, 9] 3 [1, 2, 3, 4, 5, 6, 7, 8, 9] 4 [1, 2, 3, 4, 5, 6, 7, 8, 9] 5 [1, 2, 3, 4, 5, 6, 7, 8, 9] 6 [1, 2, 3, 4, 5, 6, 7, 8, 9] 7 [1, 2, 3, 4, 5, 6, 7, 8, 9] 8 [1, 2, 3, 4, 5, 6, 7, 8, 9]

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

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

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

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

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

guest

回答2

0

ベストアンサー

swift

1// これを 2cell.Number.text = "(id[indexPath.row])" // ここでエラー出ます。 3 4// これにすると、とりあえず動くということでしょうか? 5cell.Number.text = "(indexPath.row + 1)"

追記
デリゲートメソッドcellForRowAt内の
cell.Number.text = ホニャララの上で

swift

1print("id: (id)") 2print("type: (type(of: id))") 3print("indexPath.row: (indexPath.row)") 4

ってしてみてください。

セルの個数分プリントされますが、最後が
id: [1, 2, 3, 4, 5, 6, 7, 8, 9]
type: [Int]
indexPath.row: 8
ならばそこに問題はないと思いますし、普通に動くと思いますよ。

投稿2020/06/27 20:20

編集2020/06/28 06:38
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sunglass

2020/06/28 06:13 編集

動きます。 cell.Number.text = "(indexPath.row + 1)" はセル側の連番という理解です。。
退会済みユーザー

退会済みユーザー

2020/06/28 06:38

連番を表示させたんだから連番なのは当たり前の話です
sunglass

2020/06/28 06:45

データ一個追加してしまったので最後が id: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] type: Array<Int> indexPath.row: 9 になりました。。 違う点は type: [Int]がtype: Array<Int>になっていますね。
退会済みユーザー

退会済みユーザー

2020/06/28 06:49 編集

私が勘違いしてなければ、 そこでは"Thread 1: Fatal error: Index out of range"で落ちないと思われる
sunglass

2020/06/28 06:53

あっ、、今日普通にBuild出来ました。。 (その代わり別の問題が出てきました。。)
退会済みユーザー

退会済みユーザー

2020/06/28 07:04

昨日エラーがでて、今日出なかった理由は、解明しといたほうがいいと思うよ。
sunglass

2020/06/28 07:09 編集

今から探してみます。 (今確認した限りではtextfiledの値を追加すると落ちるっぽいです。。原因はむしろそっちっぽいです。)
sunglass

2020/06/28 11:35 編集

落ちる原因解決しました。 別の非同期処理の方で読み込まれない現象が出てるのでまた質問するかも知れません。。 (クロージャーの位置は問題ないので何故再読み込みされないか明日以降調べてみます。) その時はよろしくお願いします。
guest

0

Index out of rangeは多分id[indexPath.row]の中でindexPath.rowの値がid配列の長さを超えたことです。

swift

1print(self.id.length) 2print(indexPath.row)

してみればどうでしょう?

投稿2020/06/27 12:33

YufanLou

総合スコア464

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

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

sunglass

2020/06/27 17:11 編集

コメントありがとうございます。 print(self.id) // lengthできなかったので素のままで出力 // print(self.id.count) //9,9,9,9,9,9... print(indexPath.row) idがcellForRowAt内だと何故か重複?しています。 0 [1, 2, 3, 4, 5, 6, 7, 8, 9] 1 [1, 2, 3, 4, 5, 6, 7, 8, 9] 2 [1, 2, 3, 4, 5, 6, 7, 8, 9] 3 [1, 2, 3, 4, 5, 6, 7, 8, 9] 4 [1, 2, 3, 4, 5, 6, 7, 8, 9] 5 [1, 2, 3, 4, 5, 6, 7, 8, 9] 6 [1, 2, 3, 4, 5, 6, 7, 8, 9] 7 [1, 2, 3, 4, 5, 6, 7, 8, 9] 8 [1, 2, 3, 4, 5, 6, 7, 8, 9]
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問