2016-09-20 116 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