菜鸟教程小白 发表于 2022-12-12 22:09:51

ios - prepareForSegue 目标 Controller 属性未设置


                                            <p><p><strong>这是我的 prepareForSegue:</strong></p>

<pre><code>-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if (){
    ALRollsTableViewController *rollsTableViewController = (ALRollsTableViewController *);
    Camera *c = ];
    NSLog(@&#34;CAMERA FROM INSIDE PREPARE FOR SEQUE: %@&#34;, c);
    rollsTableViewController.selectedCamera = c;
}
</code></pre>

<p>}</p>

<p><strong>我通过 NSLog 验证相机不为空:</strong></p>

<pre><code>CAMERA FROM INSIDE PREPARE FOR SEQUE: &lt;Camera: 0x8dc1400&gt; (entity: Camera; id: 0x8dafba0 &lt;x-coredata://A415F856-5F21-4F08-9CAB-4B2A023B55C3/Camera/p1&gt; ;
</code></pre>

<p><strong>ALRollsTableViewController viewDidLoad:</strong></p>

<pre><code>- (void)viewDidLoad
{
    NSLog (@&#34;ROLLS TABLE VIEW CONTROLLER : viewDidLoad!&#34;);
    NSLog(@&#34;(selected camera = %@&#34;, self.selectedCamera);
}
</code></pre>

<p><em>结果:</em></p>

<pre><code>ROLLS TABLE VIEW CONTROLLER : viewDidLoad!
(selected camera = (null)
</code></pre>

<p>如果没有设置属性,我在这里可能做错了什么?</p>

<hr/>

<p>更新</p>

<p>在 matt 的帮助下,我确定我的 prepareForSeque 中的目标 ViewController 的实例与实际的目标 ViewController 不匹配:</p>

<pre><code>rollsTableViewController FROM SEGUE: &lt;ALRollViewController: 0x8d90bf0&gt;
rollsTableViewController FROM viewDidLoad in rollsTableViewController: &lt;ALRollsTableViewController: 0x8c5ab00&gt;
</code></pre>

<p>我不知道为什么会出现这种情况或如何解决它。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><strong><em>聊天后总结:</em></strong></p>

<p>嗯,这很复杂!但基本上你是这么说的:</p>

<pre><code>-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if (){
    ALRollsTableViewController *rollsTableViewController = (ALRollsTableViewController *);
    // ...
}
</code></pre>

<p>问题在于 <code></code> <em>不是</em> ALRollsTableViewController。因此,您没有与您认为正在与之交谈的实例交谈,也没有与您认为正在与之交谈的类的实例交谈。</p>

<p>令人惊奇的是,您的代码在运行时没有崩溃。你是这么说的:</p>

<pre><code>rollsTableViewController.selectedCamera = c;
</code></pre>

<p>但 <code>rollsTableViewController</code> 实际上并不是 ALRollsTableViewController。当你不正确地转换时,你对编译器撒了谎。然而,当那条线运行时,你并没有崩溃。为什么不?这是因为你有很多带有 <code>@property selectedCamera</code> 的类!所以你正在设置一个<em>不同的类</em>的属性。但是在那个类中<em>确实存在一个具有相同名称的属性</em>,所以你没有崩溃。因此,您没有发现这是错误的类和错误的实例。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - prepareForSegue 目标 Controller 属性未设置,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/23413884/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/23413884/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - prepareForSegue 目标 Controller 属性未设置