菜鸟教程小白 发表于 2022-12-12 12:48:08

ios - 另一个 - “Unrecognized Selector Sent to Instance” 问题


                                            <p><p>我查看了有关此主题的每个已发布问题,但没有一个问题能给我解决方案。
我的项目在很大程度上复制了开发库中的 AVPlayer 演示应用程序(减去擦洗功能):我有一个复制和粘贴 <code>AVPlayerDemoPlaybackView</code> 类(重命名为 <code>YOPlaybackView</code>)和一个关联的 Controller ,以及一个非常相似的 xib(减去洗涤器)。
我的 ViewController 代码非常接近演示中的模式(为简洁起见,仅在下面发布代码差异)。</p>
<ul>
<li><p>我已确保 ViewController 是文件的所有者</p>
</li>
<li><p>我已确保网点没有重复</p>
</li>
<li><p>我已通过在 <code>dealloc</code></p> 中放置断点来检查 ViewController 是否为有效实例
<p>当播放器的当前项目更改/将更改时,<code>observeValueForKeyPath</code> 方法中发生错误。以下行给出错误“-”:无法识别的选择器发送到实例...”</p>
<pre><code>   ;
</code></pre>
</li>
</ul>
<p>如果我在此调用之前创建该 View 的实例,我不会收到错误消息:</p>
<pre><code>      YOPlaybackView* vw = [ init];
      ;
</code></pre>
<p>在我看来,这可能与 nib 延迟加载有关(并创建一个实例将其激活)。</p>
<p>查看调试器窗口,无论有没有创建(未使用的)实例的额外行,playbackView 似乎都是有效的。</p>
<p> <img src="/image/qzYkQ.png" alt="enter image description here"/> </p>
<p>谁能帮助我提高我的对象/应用生命周期知识?</p>
<hr/>
<p><strong>编辑 - 响应包含 IB 评论的建议答案</strong></p>
<p>这是 IB 的快照,在检查器中显示 View 层次结构和正确命名的自定义 View 。
<img src="/image/EP8bd.png" alt="enter image description here"/> </p>
<p><strong>编辑 - 回答有关有效 SetPlayer 的问题</strong></p>
<p>有问题的 View 类如下所示:</p>
<pre><code> @class AVPlayer;

@interface YOPlaybackView : UIView
@property (nonatomic, retain) AVPlayer* player;
- (void)setPlayer:(AVPlayer*)player;
@end
</code></pre>
<p>和实现:</p>
<pre><code> @implementation YOPlaybackView

+ (Class)layerClass
{
   return ;
}

- (AVPlayer*)player
{
   return [(AVPlayerLayer*) player];
}

- (void)setPlayer:(AVPlayer*)player
{
   [(AVPlayerLayer*) setPlayer:player];
}

@end
</code></pre>
<p><strong>编辑 - 输出日志</strong></p>
<pre><code>2013-07-23 12:05:39.084 iOSVideoPlayerExample Unknown class YOPlaybackView in Interface Builder file.
2013-07-23 12:05:39.956 iOSVideoPlayerExample Unbalanced calls to begin/end appearance transitions for &lt;YOMasterViewController: 0x985aa10&gt;.
2013-07-23 12:05:40.428 iOSVideoPlayerExample &lt;UIView: 0x8383900; frame = (0 0; 320 480); autoresize = W+H; layer = &lt;CALayer: 0x8381710&gt;&gt;
2013-07-23 12:05:40.429 iOSVideoPlayerExample -: unrecognized selector sent to instance 0x8383900
(lldb)
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的 <code>playbackView</code> 似乎是 <code>UIView</code> 的一个实例,它没有名为 <code>setPlayer:</code> 的方法。检查您是否正在创建您自己的 <code>UIView</code> 子类的实例。您可以在创建 <code>playbackView</code> 的位置发布代码片段吗?</p>

<p>如果您使用的是 Interface Builder,请确保您在检查器中设置了正确的类。</p>

<p>您需要在代码中的某处引用该类。尝试在 <code>setPlayer:</code> 调用的正上方添加 <code></code>。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 另一个 -“Unrecognized Selector Sent to Instance” 问题,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/17807402/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/17807402/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 另一个 - “Unrecognized Selector Sent to Instance” 问题