从故事板中未正确加载Swift类

时间:2018-05-29 10:57:33

标签: ios swift xcode uistoryboard xcode-storyboard

我有一个包含多个目标和多个配置的项目:让我们说Target1/Target2Debug/Alpha/Release配置。我还有一个带有一些自定义类的故事板:让我们说自定义类ViewController这是我的故事板中的初始VC。我想在代码中从故事板加载视图控制器,如下所示:

let vc = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as! ViewController

ViewController是两个目标的成员。当我在Target1上运行上面的代码时 - 两种配置都可以。当我在Target2上运行它时Debug就可以了,但在Alpha上失败并显示以下消息:

  

Interface Builder文件中的未知类ViewController。无法将'UIViewController'(0x10fbc71d0)类型的值转换为'Target2.ViewController'(0x10b29cb88)。

(如果故事板XML中没有customModule

  

Interface Builder文件中的未知类_TtC6Target19ViewController。无法将'UIViewController'类型的值(0x1083161d0)转换为'Target2.ViewController'(0x103e6b840)。

(如果故事板XML中的customModule与当前目标不匹配)

最终导致应用崩溃。

似乎在从故事板加载时无法为类名添加适当的命名空间。

Identity inspector looks like this: 在故事板XML中有:

<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">

如果我在故事板检查器中指定模块,或者直接在此视图控制器的XML中指定模块(customModule =“Target2”),那么一切都适用于Target2上的两个配置,但显然在{{1}上失败}。

在两个目标的构建设置中:Interface Builder Storyboard编译器 - 选项 - &gt;默认模块继承自Target1,继承自$(PRODUCT_MODULE_NAME),最终继承$(PRODUCT_NAME:c99extidentifier)。如果我在运行时打开TARGET_NAME $(TARGET_NAME)(这不起作用),我会看到正确的目标名称(在这种情况下为Target2 + Alpha)。这意味着模块名称应该在加载时适当地添加到ViewController作为名称空间。

当我使用所描述的配置集创建示例项目时,一切正常,这意味着我的Target2 - 实际项目中的配置出错了,但它几乎是Alpha的精确副本(不包括所有路径),这是有效的。

经过两天的探索和更改所有这些设置后,我没有想法,所以如果有人有,请填写免费分享。我会更感激。

0 个答案:

没有答案