如何更新托管对象数据?

时间:2015-06-25 15:11:51

标签: ios swift core-data nsfetchrequest

我已经开始了我的第一个核心数据应用程序。我正在使用一个名为'Folder'的实体。

第一个视图控制器在tableview中显示所有文件夹,我可以添加到该视图中并重新加载数据。这很好,因为它使用获取请求来填充表。

override func viewWillAppear(animated: Bool) {
    var error: NSError?
    let request = NSFetchRequest(entityName: "Folder")
    request.sortDescriptors = [NSSortDescriptor(key: "date", ascending: true)]

    self.events = moc?.executeFetchRequest(request, error: &error) as! [Folder]        

    self.UITable.reloadData()

 }

然而,当通过表格单元转换到另一个视图控制器时,我使用索引路径将选定的文件夹数据传递给控制器​​。例如

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if segue.identifier == "showDetails" {
        let destinationVC = segue.destinationViewController as! FolderDetailsViewController
        let indexPath = UITable.indexPathForSelectedRow()
        let selectedFolder = folders[indexPath!.row]
        destinationVC.selectedFolder = selectedFolder        
    }
 }

我的第二个视图控制器使用从第一个表视图传递的数据显示在textfields中:

var selectedFolder: Folder!
folderNameLabel.text = selectedFolder?.title
folderDetailsLabel.text = selectedFolder?.details
folderDateLabel.text = displayDate

然后我有一个模态来编辑/保存从第二个控制器出现的模态中的文件夹数据:

//Edit and save event

   let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
            //Error
            var error: NSError?

            //Storing Data from fields
            SelectedFolder!.title = FolderName.text
            SelectedFolder!.details = FolderDetails.text
            SelectedFolder!.date = FolderDate.date

            context?.save(&error)

        self.dismissViewControllerAnimated(true, completion: {});

当解除调制数据没有更新时,我必须回到第一个控制器重新加载数据并再次进行segue。

我认为这是因为我没有NSFetchRequest(或NSFetchResultsController)来获取最新的更改。

当我在模态中进行更改时,重新加载selectedFolder数据的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

您似乎想要致电moc.refreshObject(folder, mergeChanges:true)

请参阅文档here

答案 1 :(得分:0)

如果您的模态视图以全屏显示,则可以在viewWillAppera()中刷新第二个视图。

override func viewWillAppear(animated: Bool) { 
{ 
  folderNameLabel.text = selectedFolder?.title
  folderDetailsLabel.text = selectedFolder?.details
  folderDateLabel.text = displayDate
}