Как создать подкласс 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.