• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 将核心数据对象从 DetailViewController 传递到另一个 View Controller

[复制链接]
菜鸟教程小白 发表于 2022-12-12 21:46:26 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

有没有办法将 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


        }

    }

但我的对象是 nil

编辑

EditViewController上的编辑Item是这样设置的:

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

            self.configureView()
        }
    }

而detailItem在DetailViewController中是这样设置的:

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



Best Answer-推荐答案


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

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

let controller =  editViewController

...类似...

let controller = segue.destinationViewController as! EditViewController

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

===

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

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

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap