从DetailViewController传递核心数据对象到另一个视图控制器

问题描述:

有没有办法将Core Data对象从DetailViewController传递到另一个View Controller以允许编辑?从DetailViewController传递核心数据对象到另一个视图控制器

从MasterViewController导航到DetailViewController:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "showDetail" { 
      if let indexPath = self.tableView.indexPathForSelectedRow { 
       let myValue = myValues[indexPath.row] 
       let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController 
       controller.detailItem = myValue 
       controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem() 
       controller.navigationItem.leftItemsSupplementBackButton = true 
      } 
     } 
    } 

然后从DetailViewController到EditViewController:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "showEdit" { 

      let controller = editViewController 
      controller.editItem = detailItem 
      controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem() 
      controller.navigationItem.leftItemsSupplementBackButton = true 


     } 

    } 

,但我得到我的对象

编辑

在EDI上零牛逼项目设置这样的EditViewController:

var editItem: MyValues? { 
     didSet { 
      // Update the view. 

      self.configureView() 
     } 
    } 

和detailItem在DetailViewController这样设置:

var detailItem: MyValues? { 
     didSet { 
      // Update the view. 
      self.configureView() 
     } 
    } 

而不是使用属性编辑器,请使用您从SEGUE得到什么。

I.e. (假设你直接移动到你的EditViewController):替换...

let controller = editViewController 

...喜欢的东西......

let controller = segue.destinationViewController as! EditViewController 

...除非你也许应该测试它,而不是使用as!

===

与我有关如何走过来的猜测更新。 (见评论)

您必须创建任何editViewController指向代码的地方,这意味着它不是作为segue机制的一部分为您创建的实例/对象。换句话说,您有两个不同的EditViewController对象,并且您没有将数据传递给将要在屏幕上显示视图的数据。

+0

谢谢。这似乎是诀窍。然而,为什么我的代码没有工作? –

+0

您必须创建任何'editViewController'指向代码的地方,这意味着它不是作为segue机制的一部分为您创建的实例/对象。换句话说,你有两个不同的'EditViewController'对象,并且你没有将数据传递给将要在屏幕上显示视图的数据。 –

+0

谢谢你的回答,但主要是为了解释!我是否可以要求将其添加到您的答案以供其他人咨询?你也是对的我有它(editViewController)作为一个var创建在我的课堂内... –