2

我正在引用两个静态库。我在调试模拟器模式下构建它们,并且在我的应用程序中运行良好。然后我创建 debug-iphone 构建并将我的应用程序推送到设备。它打破了这个错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“***-[NSCFString sizeWithCGFont:pointSize:constrainedToSize:]: 无法识别的选择器发送到实例 0x24320”

然后显示 SIGABRT 错误。

为什么这在模拟器上可以正常工作并且只在设备上显示?

- 编辑 -

终于想出了一个解决方法,至少可以在设备上运行,但现在不能在模拟器上运行。引发异常的方法是我用于字体的类。例如,它是出现问题的库 staticLibA 的一部分。我在目标应用程序和问题类的 .m 文件中包含了 staticLibA 作为参考。我已经引用了它的头文件,它是 NSString 中的一个类别。这就是为什么在我包含 .m 文件之前它不起作用的原因吗?

如果我尝试在模拟器中运行它,则会在上述类的构建输出文件夹中出现重复对象错误。

4

3 回答 3

2

我无法告诉您为什么您的问题目前只出现在设备上 - 也许您需要清理两个构建并尝试重新编译它们?

在任何情况下,显示的异常消息都是完全有效的。没有名为的(公共)方法-[NSString sizeWithCGFont:pointSize:constrainedToSize:]。您是否尝试在任何地方调用 NSString 上的 sizeWithFont: 方法之一?

编辑:看起来sizeWithCGFont:pointSize:constrainedToSize:来自 cocos-2d,我猜这将是您的静态库之一。模拟器和设备构建之间的主要显着差异是构建体系结构 - 模拟器的体系结构是您自己机器 (i386) 的体系结构,而设备构建适用于 armv6 或 armv7。您确定您的静态库是为正确的架构构建的吗?

于 2009-11-23T16:32:13.410 回答
0

由于您的计算机采用 x86(或 x86_64)架构,因此为 Intel 平台编译了模拟器版本。

该设备构建编译为 arm6(或 arm7)架构。

您不能使用为另一个编译的库。每个的汇编代码不兼容。

于 2009-11-23T16:43:47.850 回答
0

当我错误地释放对象时出现了这个问题。所以我会有一个指向未分配对象的指针。所以当我在对象上调用一个函数时,它会说我是在一个 NSCFString 对象上调用函数。可能是因为内存被 NSString 对象重用了。我通过找到我的额外版本并将其删除来修复它。

于 2009-11-24T03:05:23.810 回答