Как создать подкласс UIApplication?

Справочная библиотека iPhone - UIApplication говорит, что я могу подкласс UIApplication, но если я попробую это, я получу исключение:

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

Это напоминает мне о Горец "Там может быть только один.:-)

Нужно ли передавать другие аргументы в UIApplicationMain? Или я что-то пропустил в библиотеке?

4 ответа

Решение

Вы передали имя своего подкласса в UIApplicationMain? Давайте предположим, что у вас есть

@interface MyUIApp : UIApplication 
...

тогда в main() вы должны сделать:

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

В info.plist вашего приложения убедитесь, что вы изменили NSPrincipalClass ключ к названию вашего подкласса. Это заставит Какао создавать правильный класс при загрузке приложений - вам не нужно делать ничего другого, чтобы ваш подкласс работал.

Я знаю, что это старый и принятый ответ в порядке, но чтобы прояснить это...

Допустим, у вас есть:

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]));                
    }
}

В случае, если вы не подкласс UIApplication или же UIApplicationDelegate ты просто проходишь nil к UIApplicationMain как соответствующий параметр.

В приложении может быть только один экземпляр UIApplication. Не следует инициализировать один новый объект приложения, используйте статический метод UIApplication:+ (UIApplication *)sharedApplication.

Другие вопросы по тегам