在Swift中跨多个目标共享故事板

时间:2017-01-15 22:27:32

标签: ios swift xcode storyboard targets

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

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

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

enter image description here

我被迫指定一个目标。无论我选择哪个目标,另一个目标都会崩溃,例如:

  

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

如何设置我的共享Storyboard,以便为两个目标构建(在Objective-C中使用)?

1 个答案:

答案 0 :(得分:2)

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

Objective-C示例:img

Swift示例:img

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

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

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

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