2016-09-20 138 views
0

我已经搜索了其他问题,并询问这是因为我找不到适合我的任何东西。Swift:如何在didSelectRowAtIndexPath时更新核心数据中的数据?

我在核心数据中有一些数据,并且想要在调用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

有人一个能请我如何更新“状态”的值。谢谢

+0

您是否尝试过'let object = todo [indexPath.row] object.setValue(yourValue,forKey:“state”)''然后用主要上下文保存。 – Santosh

+1

在任何其他情况下,您都会更新Core Data。 –

+0

@Santosh应该在didSelectRowAtIndexPath中添加代码吗? – raja

回答

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() 
+0

我设法更新它。但更新后,它应该去其他视图控制器,但它不被显示在视图控制器,我如何删除在当前表视图? – raja

0

我不知道你的模型和核心数据如何关联的,但这个想法是更新模型时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() 
} 

通常,应用程序进入后台时可以保存数据。或者其他一些不会经常被调用的地方,因为保存将是一项成本计算工作。

+0

谢谢安东尼奥。我设法更新它。但更新后,它应该去其他视图控制器,但它不被显示在视图控制器,我如何删除在当前表视图? – raja

+0

你如何设法去其他ViewController,'performSegue(withIdentifier:sender :) '? – antonio081014

+0

通常,我们将数据保存在一个VC中,然后从另一个VC中加载数据。 @raja – antonio081014