菜鸟教程小白 发表于 2022-12-12 21:46:26

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


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

<p>从 MasterViewController 导航到 DetailViewController:</p>

<pre><code>override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
      if segue.identifier == &#34;showDetail&#34; {
            if let indexPath = self.tableView.indexPathForSelectedRow {
                let myValue = myValues
                let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController
                controller.detailItem = myValue
                controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
                controller.navigationItem.leftItemsSupplementBackButton = true
            }
      }
    }
</code></pre>

<p>然后从 DetailViewController 到 EditViewController:</p>

<pre><code> override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
      if segue.identifier == &#34;showEdit&#34; {

            let controller =editViewController
            controller.editItem = detailItem
            controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
            controller.navigationItem.leftItemsSupplementBackButton = true


      }

    }
</code></pre>

<p>但我的对象是 nil</p>

<p><strong>编辑</strong></p>

<p>EditViewController上的编辑Item是这样设置的:</p>

<pre><code>var editItem: MyValues? {
      didSet {
            // Update the view.

            self.configureView()
      }
    }
</code></pre>

<p>而detailItem在DetailViewController中是这样设置的:</p>

<pre><code>var detailItem: MyValues? {
      didSet {
            // Update the view.
            self.configureView()
      }
    }
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>不要使用编辑 Controller 的属性,而是使用从 segue 中获得的内容。</p>

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

<pre><code>let controller =editViewController
</code></pre>

<p>...类似...</p>

<pre><code>let controller = segue.destinationViewController as! EditViewController
</code></pre>

<p>...除了你应该测试它而不是使用 <code>as!</code>.</p>

<p>===</p>

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

<p>您必须在代码中某处创建了 <code>editViewController</code> 指向的任何内容,这意味着它与作为 segue 机制的一部分为您创建的实例/对象不同。换句话说,您有两个不同的 <code>EditViewController</code> 对象,并且您没有将数据传递给将要在屏幕上放置 View 的对象。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 将核心数据对象从 DetailViewController 传递到另一个 View Controller,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/39043131/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/39043131/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 将核心数据对象从 DetailViewController 传递到另一个 View Controller