Xcode 8 Beta @import意外行为

时间:2016-08-16 16:19:36

标签: objective-c xcode module

所以我在中断几年之后回到macOS编程,并发现了@import语法。我创建了一个示例程序来测试它,但它不起作用,因为我的谷歌搜索似乎表明它应该。

测试项目设置:

  1. 打开Xcode
  2. 文件>最新及GT;项目...
  3. 选择macOS的Cocoa Application模板。单击“下一步”
  4. 将项目命名为“ModuleTest”,添加组织名称和组织标识符。选择Objective-C作为语言,选中Use Storyboards,确保未选中“创建基于文档的应用程序”,“使用核心数据”,“包含单元测试”和“包含UI测试”。单击“下一步”并选择保存位置。不要创建Git存储库,也不要添加到任何项目或工作区。单击“创建”。
  5. 在导航器中,单击Main.storyboard。
  6. 从对象库中,将AVKit播放器视图对象拖到故事板中视图控制器场景的视图上。
  7. 现在,在这一点上,我们可以看到症状,即如果你构建项目,会弹出一个窗口,但是播放器丢失了,xcode输出窗口会显示一条消息,例如

      

    2016-08-16 09:07:46.465 ModuleTest [19778:4097187]无法设置   (contentViewController)用户定义的检查属性(NSWindow):   *** - [NSKeyedUnarchiver decodeObjectForKey:]:无法解码类(AVPlayerView)的对象(NSDestination);可以定义该类   在源代码或未链接的库

    无论是否将@import AVKit;语句放入AppDelegate.h,AppDelegate.m,ViewController.h,ViewController.m或main.m,都会发生此错误。但是,只需在项目的Build Phases的“Link Binary with Libraries”部分中链接AVKit.framework,就可以解决这个问题,而且任何地方都不需要@import。

    那是怎么回事?我认为@import应该不需要手动链接框架?我是否错误地完成了这个过程?这是因为我正在使用故事板吗?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题是没有引用AVPlayerView的实际代码。尝试添加使用AVPlayerView的单行代码,您会发现错误消失了。