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

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

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

我查看了有关此主题的每个已发布问题,但没有一个问题能给我解决方案。 我的项目在很大程度上复制了开发库中的 AVPlayer 演示应用程序(减去擦洗功能):我有一个复制和粘贴 AVPlayerDemoPlaybackView 类(重命名为 YOPlaybackView)和一个关联的 Controller ,以及一个非常相似的 xib(减去洗涤器)。 我的 View Controller 代码非常接近演示中的模式(为简洁起见,仅在下面发布代码差异)。

  • 我已确保 View Controller 是文件的所有者

  • 我已确保网点没有重复

  • 我已通过在 dealloc

    中放置断点来检查 View Controller 是否为有效实例

    当播放器的当前项目更改/将更改时,observeValueForKeyPath 方法中发生错误。以下行给出错误“-[UIView SetPlayer:]”:无法识别的选择器发送到实例...”

         [playbackView setPlayer:player];
    

如果我在此调用之前创建该 View 的实例,我不会收到错误消息:

        YOPlaybackView* vw = [[YOPlaybackView alloc] init];
        [playbackView setPlayer:player];

在我看来,这可能与 nib 延迟加载有关(并创建一个实例将其激活)。

查看调试器窗口,无论有没有创建(未使用的)实例的额外行,playbackView 似乎都是有效的。

enter image description here

谁能帮助我提高我的对象/应用生命周期知识?


编辑 - 响应包含 IB 评论的建议答案

这是 IB 的快照,在检查器中显示 View 层次结构和正确命名的自定义 View 。 enter image description here

编辑 - 回答有关有效 SetPlayer 的问题

有问题的 View 类如下所示:

 @class AVPlayer;

 @interface YOPlaybackView : UIView
 @property (nonatomic, retain) AVPlayer* player;
 - (void)setPlayerAVPlayer*)player;
 @end

和实现:

 @implementation YOPlaybackView

 + (Class)layerClass
 {
   return [AVPlayerLayer class];
 }

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

 - (void)setPlayerAVPlayer*)player
 {
   [(AVPlayerLayer*)[self layer] setPlayer:player];
 }

 @end

编辑 - 输出日志

2013-07-23 12:05:39.084 iOSVideoPlayerExample[8331:14003] Unknown class YOPlaybackView in Interface Builder file.
2013-07-23 12:05:39.956 iOSVideoPlayerExample[8331:14003] Unbalanced calls to begin/end appearance transitions for <YOMasterViewController: 0x985aa10>.
2013-07-23 12:05:40.428 iOSVideoPlayerExample[8331:14003] <UIView: 0x8383900; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x8381710>>
2013-07-23 12:05:40.429 iOSVideoPlayerExample[8331:14003] -[UIView setPlayer:]: unrecognized selector sent to instance 0x8383900
(lldb)



Best Answer-推荐答案


您的 playbackView 似乎是 UIView 的一个实例,它没有名为 setPlayer: 的方法。检查您是否正在创建您自己的 UIView 子类的实例。您可以在创建 playbackView 的位置发布代码片段吗?

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

您需要在代码中的某处引用该类。尝试在 setPlayer: 调用的正上方添加 [YOPlaybackView class]

关于ios - 另一个 - “Unrecognized Selector Sent to Instance” 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17807402/

回复

使用道具 举报

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

本版积分规则

关注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