2010-09-19 49 views
4

我做了一个自定义的静态库,我在iOS项目中使用。当我使用NSKeyedUnarchiver解除数据存档时。当我尝试在库中使用它时会引发异常。我试图将我的静态库的类复制到我的项目中,看看是否可以解决问题,但显然无法达到静态库的目的。我也尝试过发布/调试和模拟器/设备的几种组合,但仍然不起作用。iOS NSKeyedUnarchiver错误使用静态库

NSKeyedUnarchiver难以找到需要解压缩的类吗?

编辑 我就找到了抛出的异常,并说,这是无法取消归档类JGObjectRep这是在静态库中的其他类别之一。请记住,如果我将这些复制到项目中,这工作得很好。

+0

你能在你的代码中直接创建一个JGObjectRep对象?有了这个代码,NSKeyedUnarchiver是否能找到这个类? – 2010-09-28 13:31:47

+0

我检查了它 – 2010-09-28 22:31:35

+0

是的,当我在该代码中创建一个JGObjectRep它工作正常。 – 2010-09-28 23:24:09

回答

5

尝试增加这些选项,您的链接器标记: -ObjC -all_load

+0

我试试,谢谢 – 2010-09-28 22:32:17

+0

是的,你能解释一下这到底是什么吗? – 2010-09-28 23:26:47

1

对不起,我不知道这里使用的静态库的特殊性,但是这里有一些我从其他平台记得的其他想法。

首先,问题似乎是运行时系统没有完全提供类信息,因此出现错误。

Ergo,静态库或者不包含所需的信息,或者链接器不传递信息。在后一种情况下,除非您可以找到启用此功能的额外链接程序选项,否则您就会敬酒。因此,阅读链接器手册以查看是否有相关选项。

在前一种情况下,您可以先使用工具(我相信“nm”可以这样做)来查看导出的符号,以验证类名称及其结构描述是lib中符号的一部分。我不知道它的外观如何,但Google可能会提供帮助。

另一个想法:那个特定的类是由主代码引用的吗?如果不是,链接器可能不会将其包含在最终代码中,因为它表示它只用于静态库的环境中,因此在别处不需要。因此,尝试查看编译器或链接器的命令选项中的声明,还是源代码中的编译指示,都可以让您知道这个类是全局的。

祝你好运!

+0

哦,如果你想知道,让我们知道,我也很好奇! – 2010-09-26 18:24:47