如何将UIApplication子类化?

时间:2009-09-09 11:46:02

标签: iphone

iPhone Reference Libary - UIApplication说我可以继承UIApplication,但如果我尝试这个,我会得到一个例外:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'There can only be one UIApplication instance.'

这让我想起了汉兰达“只能有一个,。: - ”

我是否必须将其他争论传递给UIApplicationMain?或者我是否想念图书馆中的某些内容?

4 个答案:

答案 0 :(得分:26)

您是否已将子类的名称传递给UIApplicationMain?我们假设你有

@interface MyUIApp : UIApplication 
...

然后在main()中你应该这样做:

NSString* appClass = @"MyUIApp";
NSString* delegateClass = nil;
int retVal = UIApplicationMain(argc, argv, appClass, delegateClass);

答案 1 :(得分:12)

在你的应用的info.plist中,确保将NSPrincipalClass键更改为子类的名称。这将使Cocoa在应用程序加载时实例化正确的类 - 您不必为了让子类工作而执行除此之外的任何操作。

答案 2 :(得分:0)

我知道这是旧的,接受的答案是o.k.,但要说清楚......

假设你有:

UIApplication子类为MyApplication

UIApplicationDelegate子类为MyAppDelegate

然后你的main.m看起来像:

#import <UIKit/UIKit.h>

#import "MyApplication.h"
#import "MyAppDelegate.h"

int main(int argc, char * argv[])
{
    @autoreleasepool
    {
        return UIApplicationMain(argc,
                                 argv,
                                 NSStringFromClass([MyApplication class]),
                                 NSStringFromClass([MyAppDelegate class]));                
    }
}

如果您没有成为UIApplicationUIApplicationDelegate的子类,则只需将nil作为相应参数传递给UIApplicationMain

答案 3 :(得分:-5)

在应用程序中只能有一个UIApplication实例,不应该初始化一个新的应用程序对象,使用UIApplication的静态方法:+(UIApplication *)sharedApplication。