将核心数据对象从 DetailViewController 传递到另一个视图控制器
Passing Core Data objects from DetailViewController to another 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
}
}
但是我的对象为零
编辑
编辑项在EditViewController上是这样设置的:
var editItem: MyValues? {
didSet {
// Update the view.
self.configureView()
}
}
并且 detailItem 在 DetailViewController 中设置如下:
var detailItem: MyValues? {
didSet {
// Update the view.
self.configureView()
}
}
不要为编辑控制器使用 属性,而是使用从 segue 中获得的内容。
即(假设您直接转到 EditViewController):替换...
let controller = editViewController
...类似...
let controller = segue.destinationViewController as! EditViewController
...除非你应该测试它而不是使用 as!
.
===
更新我对这是怎么发生的猜测。 (查看评论。)
您必须在代码中某处创建了 editViewController
指向的任何内容,这意味着它与作为 segue 机制的一部分为您创建的 instance/object 不同。换句话说,您有两个不同的 EditViewController
对象,并且您没有将数据传递给将要在屏幕上显示视图的对象。
有没有办法将核心数据对象从 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
}
}
但是我的对象为零
编辑
编辑项在EditViewController上是这样设置的:
var editItem: MyValues? {
didSet {
// Update the view.
self.configureView()
}
}
并且 detailItem 在 DetailViewController 中设置如下:
var detailItem: MyValues? {
didSet {
// Update the view.
self.configureView()
}
}
不要为编辑控制器使用 属性,而是使用从 segue 中获得的内容。
即(假设您直接转到 EditViewController):替换...
let controller = editViewController
...类似...
let controller = segue.destinationViewController as! EditViewController
...除非你应该测试它而不是使用 as!
.
===
更新我对这是怎么发生的猜测。 (查看评论。)
您必须在代码中某处创建了 editViewController
指向的任何内容,这意味着它与作为 segue 机制的一部分为您创建的 instance/object 不同。换句话说,您有两个不同的 EditViewController
对象,并且您没有将数据传递给将要在屏幕上显示视图的对象。