loadNibNamed()失败:Interface Builder文件中的未知类<mangled swift =“” identifier =“”>

时间:2018-08-23 07:31:40

标签: ios swift xcode frameworks nsbundle

我已将代码移至Xcode框架,但现在loadNibNamed()失败了(我更改了Swift标识符名称的可读部分):

Unknown class _TtC13MyFramework14MyTableCell in Interface Builder file.

loadNibNamed()目标成员资格的Swift文件中调用MyFramework

UITableViewCell子类(MyTableCell)是Obj-C类。它的标头具有public MyFramework目标成员身份,并且它的.m也是框架的成员。该单元格非常简单,有一个UIImageView和几个UILabel,没有自定义类。

在XIB中,表格单元的“类”已设置为MyTableCell。并且,将模块设置为MyFramework,并选择“从目标继承模块”。

我已经设置了框架的产品捆绑包标识符。我使用以下方法获得捆绑包:

[NSBundle bundleWithIdentifier:@"com.mycompany.myframework"];

找到捆绑包;通过打印其bundlePath进行检查。

我已经查看了这个问题并尝试了各种变体,例如未分配``MyTableCell`的模块,但没有任何效果。我还用Swift类创建了一个新的单元格XIB,但是结果相同。

有什么想法我应该/仍然可以尝试吗?

1 个答案:

答案 0 :(得分:0)

我想出了一些对我有用的解决方案-YMMV。

因此,在我的情况下,我需要向Objective C运行时公开一些自定义的Swift UIControl子类。我是这样添加注释的:

@objc(CustomButton)
public class CustomButton: UIButton {
    // some implementation
}

将此类添加到框架时,会出现错误,与您的错误非常相似。

Unknown class _TtC9CustomFramework12CustomButton in Interface Builder file.

要解决此问题,我必须修改XIB文件才能删除该模块。

Remove Module in XIB

将框架添加到另一个项目时,现在一切正常。没有错误,并且自定义视图按预期显示。