我查看了有关该主题的每个已发布问题,但没有一个给我解决方案。
我的项目在很大程度上复制了开发库中的 AVPlayer 演示应用程序(减去清理功能):我有一个复制和粘贴AVPlayerDemoPlaybackView
类(重命名为YOPlaybackView
)和一个相关的控制器,以及一个非常相似的 xib(减去洗涤器)。
我的视图控制器代码非常接近演示中的模式(为了简洁起见,代码差异仅在下面发布)。
-
我已确保视图控制器是文件的所有者
-
我已确保网点不重复
-
我已经通过在其中放置断点来检查视图控制器是否是有效实例dealloc
错误发生在observeValueForKeyPath
当玩家的当前项目改变/将要改变时的方法。以下行给出错误“-[UIView SetPlayer:]”:无法识别的选择器发送到实例...”
[playbackView setPlayer:player];
如果我在此调用之前创建该视图的实例,则不会收到错误:
YOPlaybackView* vw = [[YOPlaybackView alloc] init];
[playbackView setPlayer:player];
在我看来,这可能与笔尖延迟加载有关(并且创建一个实例将其激活)。
在调试器窗口中查看,playbackView 似乎在有或没有创建(未使用的)实例的额外行的情况下都是有效的。
任何人都可以帮助我提高对象/应用程序生命周期知识吗?
编辑 - 回应包含 IB 评论的建议答案
This is a snap of the IB, showing the view hierarchy and correctly named custom view in the inspector.
编辑 - 回答有关有效 SetPlayer 的问题
有问题的视图类如下所示:
@class AVPlayer;
@interface YOPlaybackView : UIView
@property (nonatomic, retain) AVPlayer* player;
- (void)setPlayer:(AVPlayer*)player;
@end
并暗示:
@implementation YOPlaybackView
+ (Class)layerClass
{
return [AVPlayerLayer class];
}
- (AVPlayer*)player
{
return [(AVPlayerLayer*)[self layer] player];
}
- (void)setPlayer:(AVPlayer*)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)