2

所以我今天一直在玩 GHUnit,并且有一些很好的测试在 XCode4 的模拟器中运行得很好。当我在 iPhone 上运行它们时,出现以下错误:

'Unable to instantiate the UIApplication delegate instance.
No class named GHUnitIPhoneAppDelegate is loaded.'

在你问之前,是的,我有链接器选项-ObjC-all_load设置,正如我所说,它在模拟器中运行良好,那么为什么不是 iPhone 本身呢?

困惑!

4

3 回答 3

3

我不确定这个问题的真正原因,但我确实找到了解决方法。

出于某种原因,我仍然不太确定是否理解替换:

int retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIPhoneAppDelegate");

经过

int retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIOSAppDelegate");

在主文件中将解决问题。

该类GHUnitIPhoneAppDelegate继承自GHUnitIOSAppDelegate 但它不包含在最终的二进制文件中(我运行 a nm -a GHUnitIPhoneAppDelegate|grep IPhoneApp没有结果)。

一个疯狂的猜测是,由于该类仅继承自它(没有其他方法或属性)并且因为在框架中没有实例化该类(仅通过字符串提及),编译器为了节省空间,将其从二进制信息中删除在 iOS 模式下。

希望这会有所帮助,至少对我有用。

于 2011-08-11T08:26:16.007 回答
1

澄清一下,GHUnitIOS-0.4.32 于 2011 年 8 月 11 日上传到https://github.com/gabriel/gh-unit/downloads throws

NSInternalInconsistencyException', reason: 'Unable to instantiate the UIApplication delegate instance. No class named GHUnitIPhoneAppDelegate is loaded.'

如果int main(int argc, char *argv[])包含:

int retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIPhoneAppDelegate");

它适用于:

int retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIOSAppDelegate");

由于该 armv6 和 armv7 库中缺少 GHUnitIOSAppDelegate。注意 GHUnitIPhoneAppDelegate 在模拟器库中...

GHUnitIOS.framework$ nm -a -arch i386 GHUnitIOS | grep GHUnitIPhoneAppDelegate
nm: no name list
GHUnitIOS(GHUnitIPhoneAppDelegate.o):
00000084 S _OBJC_CLASS_$_GHUnitIPhoneAppDelegate
00000070 S _OBJC_METACLASS_$_GHUnitIPhoneAppDelegate
00000048 s l_OBJC_CLASS_RO_$_GHUnitIPhoneAppDelegate
00000020 s l_OBJC_METACLASS_RO_$_GHUnitIPhoneAppDelegate
GHUnitIOS.framework$

但不在这两个设备库中的任何一个中......

GHUnitIOS.framework$ nm -a -arch armv6 GHUnitIOS | grep GHUnitIPhoneAppDelegate
nm: no name list
GHUnitIOS.framework$

GHUnitIOS.framework$ nm -a -arch armv7 GHUnitIOS | grep GHUnitIPhoneAppDelegate
nm: no name list
GHUnitIOS.framework$
于 2011-09-07T16:19:02.470 回答
0

我会将@apouche 的答案保留为已接受的答案,因为这回答了我的问题并帮助了我。

然而,来自 GHUnit 的开发者 gabriel 的消息 - 说这是一个错误,他已经发布了一个新版本 (0.4.32) 来解决这个问题。

于 2011-08-12T13:18:12.327 回答