删除TableView中的单元格时,exc_bad_access code = exc_i386_gpflt

时间:2014-11-07 13:40:48

标签: xcode swift

在xcode 6中删除我的待办事项列表中的单元格时,我随机得到一个错误 “exc_bad_access code = exc_i386_gpflt”

我有两个视图 - 第二个我输入数组“toDoList”中的项目 在第一个我显示“toDoList”中的所有项目,并有一个选项删除时,第一页的代码在这:

import UIKit


var toDoList: [String] = []

class FirstViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
//var cell = UITableViewCell()

@IBOutlet weak var itemList: 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.
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{

   return toDoList.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{

   var cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")

  cell.textLabel.text = toDoList[indexPath.row]

    return cell
}

override func viewWillAppear(animated: Bool) {


    if var storedItems: AnyObject = NSUserDefaults.standardUserDefaults().objectForKey("items"){

        toDoList = []

        for var i = 0; i < storedItems.count; ++i{

        toDoList.append(storedItems[i] as NSString)
        }
    }

    itemList.reloadData()

}
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath){

    if editingStyle == UITableViewCellEditingStyle.Delete{


    toDoList.removeAtIndex(indexPath.row)

        let saveData = toDoList

        NSUserDefaults.standardUserDefaults().setObject(saveData, forKey: "items")

        NSUserDefaults.standardUserDefaults().synchronize()

        itemList.reloadData()
    }

}

}

1 个答案:

答案 0 :(得分:0)

造成错误的原因是

itemList.reloadData()

在您的功能中

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)

为了解决您的问题,请删除该行,然后在toDoList.removeAtIndex(indexPath.row)之后添加此行:

tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)

此方法的作用是:删除索引路径数组指定的行,并选择为删除设置动画。 (来自Xcode快速帮助)