所以今天我一直在玩GHUnit,并且有一些很好的测试,它们在XCode4中的类似物中运行得很好。当我在iPhone上运行它时,我收到以下错误:
'Unable to instantiate the UIApplication delegate instance.
No class named GHUnitIPhoneAppDelegate is loaded.'
在您提出之前,是的,我设置了链接器选项-ObjC
和-all_load
,正如我所说,它在模拟器中工作正常,为什么不在iPhone本身?
困惑!
答案 0 :(得分:3)
我不确定是否存在此问题的真正原因,但我确实找到了解决方法。
出于某种原因,我仍然不太明白要更换:
int retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIPhoneAppDelegate");
通过
int retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIOSAppDelegate");
主文件中的将解决问题。
班级GHUnitIPhoneAppDelegate
继承自GHUnitIOSAppDelegate
但它没有包含在最终的二进制文件中(我运行nm -a GHUnitIPhoneAppDelegate|grep IPhoneApp
没有结果)。
一个疯狂的猜测是,因为类只从它继承(没有其他方法或属性),并且因为框架中没有任何地方实例化(仅通过字符串提到),编译器为了节省空间,将其从iOS模式下的二进制信息。
希望这有帮助,至少那对我有用。
答案 1 :(得分:1)
为了澄清,GHUnitIOS-0.4.32于2011年8月11日上传至https://github.com/gabriel/gh-unit/downloads投掷
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&中缺少GHUnitIOSAppDelegate armv7库。注意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$
答案 2 :(得分:0)
我会把@ apouche的答案留给已接受的答案,因为这回答了我的问题并帮助了我。
然而有来自GHUnit的开发人员gabriel的消息 - 说这是一个错误,并且他发布了一个新版本(0.4.32)修复了这个问题。