Swift:如何在didSelectRowAtIndexPath中更新Core Data中的数据?

时间:2016-09-20 16:43:23

标签: ios swift uitableview core-data

我已经搜索了其他问题,并且因为找不到适合我的任何东西而问这个问题。

我在核心数据中有一些数据,并希望在调用didSelectRowAtIndexPath时更新它。这是我的代码

class ViewController: UIViewController, UITableViewDelegate {

var todo = [NSManagedObject]()
var JSON = Data.sharedInstance

@IBOutlet var TableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.JSON.JSONData { 
        SVProgressHUD.dismiss()
        self.TableView.reloadData()
    }
}

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedobject = appDelegate.managedObjectContext

    let fetchrequest = NSFetchRequest(entityName: "ToDo")
    do {
        let results = try managedobject.executeFetchRequest(fetchrequest)
        todo = results as! [NSManagedObject]

     } catch {
        print("error")
    }
    TableView.reloadData()

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

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

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)

   let state = todo[indexPath.row].valueForKey("state") as? Float
    print(state)


    if state == 0.0 {
    cell.textLabel?.text = todo[indexPath.row].valueForKey("name") as? String
    }
    return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

}

现在,当didSelectRowAtIndexPath被调用时,我想更新cellForRowAtIndexPath到1.0

中可以看到的关键字“状态

有人可以请我如何更新“”的价值。感谢

2 个答案:

答案 0 :(得分:0)

创建类似reloadData的新方法,并移动代码以从viewDidAppear获取对象。在didSelectRowAtIndexPath中,执行以下操作:

todo[indexPath.row].updateValue(NSNumber(float: 1.0), forKey: "state") // Sample syntax only. Not sure if it is correct.
managedObjectContext.save()

reloadData()

答案 1 :(得分:0)

我不知道你的模型和Core Data是如何相关的,但是想法是在调用didSelectedRowAtIndexPath时更新模型,并告诉tableView reloadData()。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
     // Update in todo array.
     // Save it, even I don't recommend to save it here,
     tableView.reloadData()
}

通常,当应用进入后台时,可以保存数据。或者其他一些不会被不断调用的地方,因为保存将是一项耗资的工作。