- 更新日: 2015年6月3日
- Swift & iOS
UITableViewでfatal error: Array index out of range
Xcode で ViewController の中に Table View を配置して、UITableViewDelegate, UITableViewDataSource プロトコルのメソッドを実装するという、よく使う処理を書いたのですが、表題のエラーに遭遇しました。ビルドすると Xcode コンソールに以下のように表示される。
1 2 3 |
fatal error: Array index out of range |
原因は、tableView(tableView: UITableView, numberOfRowsInSection section: Int) の実装に不備があって、セクションに含まれるセルの行数をとりあえずの動作確認のために固定してたのが原因。
tableView(tableView: UITableView, numberOfRowsInSection section: Int) で実際のセルの行数を返すように修正
最初、以下のように tableView(tableView: UITableView, numberOfRowsInSection section: Int) で、とりあえずの動作確認のために、セクションのセル行数を 20 として固定で返すようにしていた。これを修正し忘れてたのが原因で、少しはまってしまいました。
TodoListViewController.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class TodoListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { var tasks: [Todo]! override func viewDidLoad() { super.viewDidLoad() tasks = Todo.MR_findAll() as? [Todo] } // MARK: - UITableViewDataSource func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 20 // -> fatal error: Array index out of range } // ... } |
viewDidLoad で登録済みの Todo タスクを全て取得して、Table View に表示するような処理です。該当の箇所を、以下のように修正して、実際の tasks の数(tasks.count)を返すようにしました。
TodoListViewController.swift
1 2 3 4 5 6 7 8 9 10 |
class TodoListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { // ... // MARK: - UITableViewDataSource func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return tasks.count } // ... } |
これで、fatal error: Array index out of range が出なくなりOK。
- Swift & iOS の関連記事
- WKWebView/UIWebViewでウェブページが真っ白
- Unityのインストールと初期設定
- WKWebView/UIWebViewでNavigation Barの下にウェブページが隠れるのを回避
- SwiftでArray(配列)などをシャッフル
- Navigation Controllerで画面遷移させるSwiftコード
- Swiftでタップ/スワイプのイベント処理実装・UITapGestureRecognizerとUISwipeGestureRecognizer
- UIPageViewController画面下部のUIPageControlを非表示にする
- Swiftのバージョン確認・REPL実行
- Xcode7.0アップデートで遭遇した課題2つ
- 正規のXcodeかどうかチェック(XcodeGhostマルウェア騒動)
Leave Your Message!