Error fatal de Swift: el índice de array fuera de range

Estoy haciendo una aplicación de list de tareas, pero cuando bash eliminar algo de mi list, xcode me está dando un error que dice "error fatal: índice de matriz fuera de range". ¿Alguien puede decirme qué estoy haciendo mal con mi matriz que está causando que esto suceda?

import UIKit class SecondViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 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. } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return eventList.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell") cell.textLabel?.text = eventList[indexPath.row] return cell } override func viewWillAppear(animated: Bool) { if var stonetworkingEventList : AnyObject = NSUserDefaults.standardUserDefaults().objectForKey("EventList") { eventList = [] for var i = 0; i < stonetworkingEventList.count; ++i { eventList.append(stonetworkingEventList[i] as NSString) } } } func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if(editingStyle == UITableViewCellEditingStyle.Delete) { eventList.removeAtIndex(indexPath.row) NSUserDefaults.standardUserDefaults().setObject(eventList, forKey: "EventList") NSUserDefaults.standardUserDefaults().synchronize() } } } 

También se crea un punto de interrupción que dice EXC_BAD_INSTRUCTION en eventList.removeAtIndex(indexPath.row) .

No es suficiente eliminar el elemento de la matriz de origen de datos. También tiene que decirle a la vista de tabla que la fila se elimina:

 if editingStyle == .Delete { eventList.removeAtIndex(indexPath.row) tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic) // ... } 

De lo contrario, la vista de tabla llamará a los methods de fuente de datos para el número original de filas, causando el error fuera de range.

Alternativamente, puede llamar a tableView.reloadData() al modificar el origen de datos, pero el método anterior proporciona una animation más agradable.

Significa que está intentando acceder a un índice, indexPath.row , que excede el range eventList . Para solucionar este problema, intente:

 func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if(editingStyle == .Delete && indexPath.row < eventList.count) { eventList.removeAtIndex(indexPath.row) tableView.reloadData() NSUserDefaults.standardUserDefaults().setObject(eventList, forKey: "EventList") NSUserDefaults.standardUserDefaults().synchronize() } }