ios - 将 Core Data 对象从 DetailViewController 传递到另一个 View Controller

标签 ios core-data swift2

有没有办法将核心数据对象从 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()
        }
    }

在 DetailViewController 中,detailItem 的设置如下:

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

最佳答案

不要使用编辑 Controller 的属性,而是使用从 segue 获得的属性。

即(假设您直接移动到 EditViewController):替换...

let controller =  editViewController

...类似...

let controller = segue.destinationViewController as! EditViewController

...除非您可能应该测试它而不是使用 as!

===

更新我对这是如何发生的猜测。 (见评论。)

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

关于ios - 将 Core Data 对象从 DetailViewController 传递到另一个 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39043131/

相关文章:

ios - UIButton 触摸 Action 不在触摸时调用但在触摸移动时调用

ios - 检测 [NSTimeZone localTimezone] secondsFromGMT 属性更改

ios - 是否可以使用偏移/分页从 CoreStore 获取记录?

ios - 如何在 RestKit 中定义不在同一 JSON 文档中的实体之间的关系映射?

ios - 当init()也初始化成员变量并引用 "self"时super.init()放在哪里

ios - RNFIREBASE MESSENGER 不适用于 iOS,但适用于 Android

ios - 在 iPhone 应用程序中存储 "total number of time spent"的值

ios - 跨多个 UITableViewCells 拆分单个核心数据对象

swift - 如何快速连接字符串中的 "+"运算符

ios - 在 Swift 2 中,NSDictionary 发生了什么变化?