主文件中的标准参数

主文件中的标准参数是什么。 我想我在主文件中设置了错误的标准参数,需要更改它们。 我认为问题是UIApplicationMain参数中的nil和nil。

这是我的代码:

#import  int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal; } 

错误代码:

 Attaching to process 1420. 2011-09-02 14:33:04.440 HypnoTime[1420:207] *** Assertion failure in UIApplicationMain(), /SourceCache/UIKit_Sim/UIKit-1448.89/UIApplication.m:1359 2011-09-02 14:33:04.588 HypnoTime[1420:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unable to instantiate the UIApplication delegate instance. No class named AppDelegate is loaded.' *** Call stack at first throw: ( 0 CoreFoundation 0x00dc15a9 __exceptionPreprocess + 185 1 libobjc.A.dylib 0x00f15313 objc_exception_throw + 44 2 CoreFoundation 0x00d79ef8 +[NSException raise:format:arguments:] + 136 3 Foundation 0x00816341 -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] + 101 4 UIKit 0x00021bcd UIApplicationMain + 962 5 HypnoTime 0x000027cf main + 127 6 HypnoTime 0x00002745 start + 53 7 ??? 0x00000001 0x0 + 1 ) terminate called after throwing an instance of 'NSException' Current language: auto; currently objective-c (gdb) 

UIApplicationMain的最后一个参数是UIApplicationDelegate子类的名称。 如果您以编程方式创建应用程序,而不使用任何nib文件,则需要它。

 int retval = UIApplicationMain(argc, argv, nil, NSStringFromClass([YourAppDelegate class])); 

您需要#import "YourAppDelegate.h"才能以这种方式工作,或者您可以像Voloda2建议的那样对该名称进行硬编码。

使用这种方式的好处是,如果您更改您的应用程序委托类名称,您将立即获得编译器警告,而如果它是硬编码的,它将构建并运行而不会发出警告,但会崩溃。

可能是你需要的:

 int retval = UIApplicationMain(argc, argv, nil, @"AppDelegate"); 

如果HypnoTime是“IOS编程:大书呆子牧场指南”中的示例,那么我可以说我也在模拟器中运行了奇怪的崩溃问题。 “nil,nil”参数将在main.m中起作用。 我最终完全从模拟器中删除了应用程序,清理了构建,然后重新运行,我的exception消失了。 我正在使用4.3 SDK和4.3模拟器。

您可能会尝试这样做或完全重新启动模拟器,然后再努力寻找编码错误。

这根本没有帮助,但我在MonoTouch中有相同的消息,我发现我将AppDelegate.cs Build Action设置为Bundle Resource而不是Compile,因此它不包含在构建中。