TableViewのデータを削除しようとするとアプリが動かなくなる


`TableView`のデータを削除しようとすると、何のエラーも表示せずにアプリが動かなくなります。下記のコードのどこがおかしいでしょうか？個人的にオプショナルに関する部分が怪しいかと思っているのですが、具体的にわかりません。。。どなたか不具合の原因が分かる方がいれば教えていただきたいです。すみませんが、よろしくお願いします。

DataViewControllerクラス

[code]

    var nounData: NSMutableArray = NSMutableArray()
    let dbhelper = DatabaseHelper()
    nounData.addObjectsFromArray(dbhelper.outputWord("AAA"))    //データベースにあるString型の値が入る
    
    func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!){            
        if(editingStyle == UITableViewCellEditingStyle.Delete){
            removeData("AAA", wordData: nounData, indexPath: indexPath.row)
        }
    }
    
    func removeData(speech: String, wordData: NSMutableArray, indexPath: Int) {
        let dbhelper = DatabaseHelper()
        dbhelper.removeWord(speech, word: (wordData.objectAtIndex(indexPath) as? String)!)
        wordData.removeObjectAtIndex(indexPath)
        self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)
    }
    
[/code]

DatabaseHelperクラス

[code]

    func removeWord(speech: String, word: Optional<String>) {
            let realm = RLMRealm.defaultRealm()
            realm.transactionWithBlock( { () -> Void in
            realm.deleteObjects(Word.objectsWhere("speech == %@ AND word == %@", speech, word!))
        })
    }
    
[/code]



[code]

    func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!){            
        if(editingStyle == UITableViewCellEditingStyle.Delete){
            removeData("AAA", wordData: nounData, indexPath: indexPath.row)
        }
    }
    
[/code]

上記のメソッドを

[code]

    func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!){            
        if(editingStyle == UITableViewCellEditingStyle.Delete){
            removeData("AAA", wordData: nounData, indexPath: indexPath)
        }
    }
    
[/code]

に変更することでアプリが動かなくなることがなくなりました。  
変更箇所がわかりにくいのですが、`removeData`の第三引数を`indexPath.row`から`indexPath`に変更しました。`removeData`にある

[code]

    self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)
    
[/code]

のメソッドの第一引数が`indexPath.row`ではなく`indexPath`を取るからでした。  
ご回答くださった皆様ありがとうございました。




UITableViewからデータを削除する際には、  
データソースからの削除だけでなく行の削除自体も行う必要があります。

[code]

    removeData("AAA", wordData: nounData, indexPath: indexPath.row)
    
[/code]

の後に、

[code]

    tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)
    
[/code]

が必要となります。

