Как подклассы UIApplication?
iPhone Reference Libary - UIApplication говорит, что я могу подклассифицировать UIApplication, но если я попробую это, я получу исключение:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'There can only be one UIApplication instance.'
Это напоминает мне горца "Может быть только один.: -)
Должен ли я передавать другие аргументы в UIApplicationMain? Или я пропустил что-то в своей библиотеке?
Ответы
Ответ 1
Вы передали имя своего подкласса в UIApplicationMain? Предположим, что у вас есть
@interface MyUIApp : UIApplication
...
то в main() вы должны сделать:
NSString* appClass = @"MyUIApp";
NSString* delegateClass = nil;
int retVal = UIApplicationMain(argc, argv, appClass, delegateClass);
Ответ 2
В вашем приложении info.plist убедитесь, что вы изменили ключ NSPrincipalClass
на имя вашего подкласса. Это сделает Cocoa экземпляр правильного класса при загрузке приложений - вам не нужно ничего делать, кроме того, чтобы ваш подкласс работал.
Ответ 3
Я знаю, что это старый, и принятый ответ - 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]));
}
}
Если вы не подклассы UIApplication
или UIApplicationDelegate
, вы просто передаете nil
в UIApplicationMain
в качестве соответствующего параметра.
Ответ 4
В приложении может быть только один экземпляр UIApplication, вы не должны инициализировать один новый объект приложения, используйте статический метод UIApplication: + (UIApplication *) sharedApplication.