将Core DataController中的Core Data对象传递给另一个View Controller

时间:2016-08-19 15:47:41

标签: ios core-data swift2

有没有办法将Core Data对象从DetailViewController传递到另一个View Controller以允许编辑?

从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


        }

    }

但我对我的对象没有意见

修改

编辑项在EditViewController上设置如下:

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

            self.configureView()
        }
    }

并且detailItem在DetailViewController中设置如下:

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

1 个答案:

答案 0 :(得分:2)

不使用编辑控制器的属性,而是使用从segue获得的内容。

即。 (假设您直接转到EditViewController):替换...

let controller =  editViewController

......有类似......

let controller = segue.destinationViewController as! EditViewController

...除了你应该测试它而不是使用as!

===

更新我的猜测是怎么回事。 (见评论。)

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