Подтвердить что ты не робот

Как подклассы UIApplication?

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

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

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

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

4b9b3361

Ответ 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.