学校のプロジェクトで作っているTo Do Listアプリについて、困っています。

私が使っているのは
Xcode Version 8.1
Swift 2.0  です。

私はまだプログラミングを始めたばかりの初心者で、このアプリもチュートリアルを見て作っています。

こちらが私の見ているチュートリアルです:
https://www.youtube.com/watch?v=Md0KDy6DCAc

また、この方のフルコードが載っているサイトがこれです:
https://github.com/mobilespace/ToDoList

コードを全て書き終えてシミュレーターを起動し、To Do Itemを足そうとしたのですが、Itemをセーブしようと Save を押したらコードへ戻り、

"Thread 1: EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP, subcode=0×0)"

と出てきました。

出てきたところは AddToDoItemController.swiftの

 delegate?.addToDoItemToList(toDoItemField.text!)

というラインです。

デバッグコンソールには

To Do List[55266:2935900] [MC] Reading from private effective user
settings. fatal error: unexpectedly found nil while unwrapping an
Optional value (lldb)

と出ていました。

bad instructionということは、きちんと指示ができていない、ということだというのは分かるのですが、何が足りないのでしょうか?
また、何が足りないのかを調べる方法はありますか?

コードのコピーです:

AddToDoItemController.swift

import UIKit

protocol AddToDoItemControllerDelegate: class {
    func addToDoItemToList(_ text:String)
}

class AddToDoItemController: UIViewController {

    @IBOutlet weak var toDoItemField: UITextField!

    weak var delegate: AddToDoItemControllerDelegate?

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func cancelBarButtonPressed(_ sender: AnyObject) {
        self.dismiss(animated: true, completion: nil)
    }

    @IBAction func saveBarButtonPressed(_ sender: AnyObject) {
        delegate?.addToDoItemToList(toDoItemField.text!)
        self.dismiss(animated: true, completion: nil)
    }

}

ViewController.swift

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, AddToDoItemControllerDelegate {

    @IBOutlet weak var tableView: UITableView!

    var toDoList: NSMutableArray = ["Go get groceries", "Walk the dog", "Watch a movie", "Do your homework"]

    var completedToDoList: [Int:String] = [:]

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self
    }

    override func viewWillAppear(_ animated: Bool) {
        resetAccessoryType()
        tableView.reloadData()
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "ToDoCell", for: indexPath)
        cell.textLabel?.text = toDoList[indexPath.row] as? String

        return cell
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func resetAccessoryType() {
        for row in 0..<toDoList.count {
            if let cell = tableView.cellForRow(at: IndexPath(row: row, section: 0)) {
                cell.accessoryType = .none
            }
        }
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)

        if let cell = tableView.cellForRow(at: indexPath) {
            if cell.accessoryType == .none {
                cell.accessoryType = .checkmark
                completedToDoList[completedToDoList.count] = toDoList[indexPath.row] as? String
                toDoList.removeObject(at: indexPath.row)
            } else {
                cell.accessoryType = .none
            }
        }
    }

    func addToDoItemToList(_ text:String) {
        toDoList[toDoList.count] = text

        tableView.reloadData()
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if(segue.identifier == "AddToDoItemSegue") {
            let navigationController = segue.destination as! UINavigationController
            let addToDoItemViewController = navigationController.topViewController as! AddToDoItemController

            addToDoItemViewController.delegate = self
        } else if(segue.identifier == "CompletedToDoItemsSegue") {
            let completedToDoItemsController = segue.destination as! CompletedToDoItemsController
            completedToDoItemsController.completedToDoList = completedToDoList 
        }
    }

}

よろしくお願いします。