Xcode 7 beta (5 & 6) 看不到某些 VC 的 IBOutlets

Posted

技术标签:

【中文标题】Xcode 7 beta (5 & 6) 看不到某些 VC 的 IBOutlets【英文标题】:Xcode 7 beta (5 & 6) cannot see IBOutlets of some VCs 【发布时间】:2015-08-25 15:54:27 【问题描述】:

在过去一两周的某个时候,Xcode 7 beta(当时是 beta 5,现在仍然是 beta 6)中的 Storyboard 编辑器停止识别我的 UIViewController 一些(不是全部)中的 IBOutlets子类。 (注意:我的应用程序是一个纯 Swift 2、ios 9 目标项目。)

具体来说,它无法“看到”VC 中的 IBOutlets,其源文件位于我的项目(特定于应用程序的)主文件夹中,但它可以在(通用的、非特定于应用程序的) 我保存在“外部”文件夹中的 VC。更重要的是,如果我将那些特定于应用程序的 VC 移出主文件夹,Storyboard 编辑器会很好地看到它们的 IBOutlets:

<Project Folder>
    IIAM.xcodeproj     <-- Project
    Externals          <-- Where I keep non-app-specific code and resources
        Classes
            Views      <-- The Storyboard Editor sees the IBOutlets of all these files just fine
    IIAM               <-- All app-specific code and resources
        Classes
            Views      <-- The Storyboard Editor  doesn't recognize any IBOutlets of these files

但如果我将受影响的视图移出 IIAM 文件夹:

<Project Folder>
    IIAM.xcodeproj     <-- Project
    Externals          <-- Where I keep non-app-specific code and resources
        Classes
            Views      <-- The Storyboard Editor  sees the IBOutlets of all these files just fine
    IIAM                      <-- All app-specific code and resources
        Classes
    Views                    <-- The Storyboard Editor  _does_ recognize IBOutlets these files when moved out here!

在情节提要编辑器中,所有无法识别的类的“模块”属性为空(注意:它没有默认的灰显“Current - IIAM”,它只是灰显"None" ) — 即使我将模块名称设置为我的项目的名称,IBOutlets 仍然无法识别。同时,“Externals”下的VC模块确实有灰色的“Current - IIAM”。

因此,潜在的问题似乎很明显,即当我的应用程序特定的 VC 存储在我的应用程序特定的“IIAM”下时,Storyboard Editor(通常可能还有 Xcode)无法将它们识别为属于应用程序的模块文件夹(顺便说一句,AppDelegate 以及几乎所有的类和资源也都位于该文件夹中),但是当它们被移出该文件夹时。

我检查了我的目标的构建设置,以确认我的所有 VC(外部和特定于应用程序)都已指定。我什至检查了我的故事板文件的 XML,看看我是否可以发现其中 VC 的指定和识别方式有什么不同,我确实注意到一件事:那些 IBOutlets 被识别的 VC 都有属性:

 customModule="IIAM" customModuleProvider="target"

而(至少大多数)那些无法识别 IBOutlets 的人缺少 customModuleProvider="target" 属性。但即使在我编辑了故事板文件以为我的所有 VC 设置该属性之后,故事板编辑器仍然无法将它们识别为属于我的应用程序的模块,或者识别它们的 IBOutlets。我已经尝试清理、重建、删除所有 Xcode 首选项和派生数据、重新安装 Xcode,但除了将我的 VC 移动到项目目录的顶层之外,没有任何区别。

(请注意,我的应用程序仍然可以正常执行,如果我通过从情节提要中拖动控件来手动添加(或替换)我的源代码中的 IBOutlets;但即使我这样做了,所有此类 IBOutlets 都会显示故事板编辑器无法识别,带有黄色的小警告图标。当然,我必须以这种方式手动添加 all IBOutlets,即使是那些用于视图之类的东西 - 然后我必须立即从 VC 源中删除,因为它当然与继承的视图属性冲突,但这确实至少会显示一个黄色警告 IBOutlet,然后让应用程序运行)

所以,我完全不知所措。有没有其他人遇到过这种行为?有谁知道我该如何解决这个问题?

帮助!谢谢!

卡尔

【问题讨论】:

一些进一步的信息:认为可能故事板编辑器被其路径中有两个名为“Views”的文件夹(即使在不同的目录中)弄糊涂了,我尝试重命名 /Externals/Classes /Views 文件夹以查看是否会使 /IIAM/Classes/Views 对其“可见”;但这什么也没做。我什至完全从项目中删除了 /Externals/Classes/Views,但同样,这并没有什么区别。 【参考方案1】:

好的,我不知道这是否真的是一个“答案”,但我至少能够纠正这个问题。我在笔记本电脑上看到了上面报告的问题,这是我的主要开发机器,但我也在将我的项目文件同步到我的桌面 Mac。今天早上,我将我的桌面 Mac 更新到了最新的 Xcode 测试版,并从那里启动了我的项目;正如我所希望的那样,在那台 Mac 上,故事板编辑器“看到”我的 VC 和他们的 IBOutlets 就好了。更好的是,在与我的笔记本电脑再次同步文件后,我的笔记本电脑现在一切正常。所以,这个问题已经解决了,虽然我真的没有解释发生了什么,或者如果它再次发生,我没有确定的程序可以遵循。

【讨论】:

以上是关于Xcode 7 beta (5 & 6) 看不到某些 VC 的 IBOutlets的主要内容,如果未能解决你的问题,请参考以下文章

更新到 Xcode 7 Beta 5 并收到此错误:失败,退出代码 6

Xcode 6 + iOS 8 SDK 但部署在 iOS 7 (UIWebKit & WKWebKit)

使用 Xcode6-Beta 运行 Xcode 5.1.1 项目

XCode 7 (Beta 3 & 4) 无法下载和安装 iOS 8.* 模拟器

将 Xcode 6 beta 6 更新到 beta 7 后出现“可选错误”

XCode 6 Beta 6 Beta 7 中的错误 - 可选类型的值未解包