有没有办法将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()
}
}
答案 0 :(得分:2)
不使用编辑控制器的属性,而是使用从segue获得的内容。
即。 (假设您直接转到EditViewController):替换...
let controller = editViewController
......有类似......
let controller = segue.destinationViewController as! EditViewController
...除了你应该测试它而不是使用as!
。
===
更新我的猜测是怎么回事。 (见评论。)
您必须在某个地方的代码中创建了任何editViewController
点,这意味着它不是作为segue机制的一部分为您创建的相同实例/对象。换句话说,您有两个不同的EditViewController
对象,并且您没有将数据传递给将要在屏幕上放置视图的对象。