【问题标题】:Sharing a storyboard across multiple targets in Swift在 Swift 中跨多个目标共享故事板
【发布时间】:2017-01-15 22:27:31
【问题描述】:

我有一个包含两个目标的应用程序,它们具有几乎相同的用户界面和功能(预付费与 IAP)。出于这个原因,他们共享一个故事板。在 Objective-C 中这没有问题。

但是现在我开始使用 Swift 实现新的视图控制器。我遇到的问题是我需要为我的 Storyboard 中实现的自定义视图控制器指定一个“模块”。

自定义视图控制器的 Identity Inspector 如下所示:

我不得不指定我的一个目标。无论我选择哪个目标,另一个目标都会崩溃并显示如下消息:

2017-01-15 17:26:32.284 TapTyping[85802:15083599] Interface Builder 文件中的未知类 _TtC13TapTypingLite19EntryViewController。

如何设置我的共享 Storyboard 以便为两个目标构建(就像它在 Objective-C 中的习惯一样)?

【问题讨论】:

  • 我的工作正好相反——一些 UIViews 在框架目标中,在我的应用程序/扩展中,我的框架是我的模块。
  • 您确定必须指定一个模块吗?我一般删除这个字段的内容,默认为Current - {Module name}
  • @dfd yah.. 看起来我可能需要为此类视图控制器创建一个共享框架
  • @Estel 不,Xcode 不会让我清除此字段(当我更改焦点时,它会自动填充为“TapTyping”或“TapTypingLite”
  • 谨慎一点 - 我从未尝试过编码故事板,只是 UIViews。 (我的情节提要是空白的 VC,其背景颜色与代码中的所有其他内容一起使用。)理论上,您可以在框架内编写 UIStoryboard(?),但我会更深入地了解 UIView。你听起来好像你之前已经设置了一个框架目标。如果没有,这是我如何做事的答案:stackoverflow.com/questions/41207622/…

标签: ios swift xcode storyboard targets


【解决方案1】:

Awolf,我也有一个包含多个目标的项目,我已经开始逐渐将它从 Objective-C 转换为 Swift。通过大量测试,我发现对于已从 Objective-C 扩展到 Swift 的模块,只要我将类从 Objective-C 名称更改为 Swift 名称,我也会出现此错误“接口生成器文件中的未知类 XXX” .我通过反复试验发现必须为带有 Swift 文件的视图/表格视图指定模块,否则将找不到它们。对于带有 Objective-C 文件的视图/表格视图,模块需要为空白,否则将找不到它们。我对原始 XML 源代码进行了这些更改,方法是按住 Control 并单击 MainStoryboard.storyboard 并选择 Open As, Source Code。我的命名约定是转换为 swift 的文件以“ProjectOrganizer”开头,仍然是 Objective-C 的模块以“StatusReport”开头。这里有两个例子:

Objective-C 示例:

Swift 示例:

编辑完原始 XML 源代码后,您可以通过按住 Control 键单击 MainStoryBoard.storyboard 并选择 Open As, Interface Builder - Storyboard 来切换回 Interface Builder 的 GUI 视图。

如果您解决了模块的 Objective - C vs. Swift 设置,所有目标都将成功构建,尽管所有 Swift 文件都被指定为您的目标之一。确保所有自定义模块设置都设置为相同的目标。

[Interface Builder GUI 中的 Swift 示例][3]

[Interface Builder GUI 中的 Objective-C 示例][4]

【讨论】:

  • 如果您只想在 Interface Builder GUI 中进行这些更改,您需要为每个 Swift View/TableView 选择一个特定的(自定义)模块并勾选从目标继承的框。对于每个 Objective-C 视图/表格视图,将(自定义)模块指定为“无”。
  • 嗨@LarryRicker,你的两张截图看起来一模一样。也许是一个错误?除此之外,您为 Swift 文件指定什么模块?该模块应该是目标,但正如我在原始问题中所述,我有两个目标。为 Swift 文件指定任何内容都会导致其他目标无法构建。所以我不确定你的解决方案能解决这个问题。
  • 感谢您指出这一点。我有 4 个屏幕截图,但我的 ID 限制使我无法上传它们。升级后我可以稍后返回。我删除了一个并上传了正确的 Swift 屏幕截图。
猜你喜欢
  • 1970-01-01
  • 2018-03-01
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
相关资源
最近更新 更多