QA@IT

【Swift】ToDoリスト作成中に出たエラーの解決場所がわかりません。

4529 PV

書籍を参考にして、ToDoリストを作ろうとしています。
動作は右上の+ボタンを押したら新しくアラートでテキストボックスが出現し、入力してOKを押すとリストに今の項目が追加されるものを想定しています。

実行中、右上の+ボタンを押して、テキストを何か入力してOKを押すと下記エラーが出て止まります。

下のself.tableView.insertRowsAtIndexPathsメソッドを実行したときに下記エラーで停止してしまいます。
fatal error: unexpectedly found nil while unwrapping an Optional value

アンラッピング中にnilが代入された?という意味なのはなんとなく分かるのですが、具体的にこのコードのどこを直せば正常に動作するのかがわかりません・・・

Storyboardでのレイアウトと、紐付設定はすべてしてあります。

swiftは勉強を始めたばかりでさっぱりです。。。よろしくお願いいたします。

下記はViweController.swiftの中身です。

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var todoList = [String]()

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func tabAddButton(sender: AnyObject) {
        //アラートダイアログの生成
        let alertController = UIAlertController(title: "TODO追加", message: "TODOを入力してください", preferredStyle:  UIAlertControllerStyle.Alert)

        //テキストボックスの追加
        alertController.addTextFieldWithConfigurationHandler(nil)

        //OKボタンの処理
        let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default){
            (action: UIAlertAction) -> Void in

            if let textField = alertController.textFields?.first{
                self.todoList.insert(textField.text!, atIndex: 0)
                self.tableView.insertRowsAtIndexPaths(
                    [NSIndexPath(forRow: 0, inSection: 0)],
                    withRowAnimation: UITableViewRowAnimation.Right)
            }
        }

        //Cancelボタン追加
        alertController.addAction(cancelAction)

        presentViewController(alertController, animated: true, completion: nil)
    }


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return todoList.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
        let cell = tableView.dequeueReusableCellWithIdentifier("todoCell", forIndexPath: indexPath)
        let todoTitle = todoList[indexPath.row]
        cell.textLabel!.text = todoTitle
        return cell
    }

}

ウォッチ

この質問への回答やコメントをメールでお知らせします。