Как создается AppDelegate? - PullRequest
1 голос
/ 22 июня 2011

У меня есть приложение для iOS, для которого я хочу создать ViewController программно.

Я запустил пустой проект XCode и изменил метод main так, чтобы он выглядел следующим образом

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, @"MyAppDelegate_iPad");
    [pool release];
    return retVal;
}

приложение является универсальным приложением, MyAppDelegate_iPad является подклассом MyAppDelegate, который является подклассом NSObject <UIApplicationDelegate>.

Моя проблема в том, что метод applicationDidFinishLoading, который я переопределил в MyAppDelegate_iPad,никогда не вызывается (точка останова на первой строке никогда не попадет).Метод выглядит следующим образом:

-(void) applicationDidFinishLaunching:(UIApplication *)application {
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    if(!window)
    {
        [self release];
        return;
    }
    window.backgroundColor = [UIColor whiteColor];

    rootController = [[MyViewController alloc] init];

    [window addSubview:rootController.view];
    [window makeKeyAndVisible];
    [window layoutSubviews];
}

Я удалил строку для ссылки на файл пера из моего plist-файла (раньше я получал белый экран «Моё универсальное приложение на iPad» по умолчанию), и теперь все, чтоотображается черный экран.applicationDidFinishLoading все еще не вызывается.

Я что-то не так делаю?Как правильно создать свой экземпляр AppDelegate?

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Есть основной файл пера, который загружает ваше приложение. На этот nib-файл ссылаются в файле Info.plist под ключом NSMainNibFile, и он должен содержать объект, соответствующий классу делегата вашего приложения (установка атрибута Class в Interface Builder). На этот объект делегата приложения ссылается выход делегат в заполнителе владельца файла.

Так что, если я правильно понимаю, загрузчик приложений загружает основной файл пера, устанавливая себя в качестве владельца пера. Его свойство delegate устанавливается на новый экземпляр класса делегата приложения, поэтому загрузчик знает, куда отправлять различные обратные вызовы событий жизненного цикла приложения.

В блоге Какао с Любовью .

есть отличная запись в блоге о запуске приложения Какао.
0 голосов
/ 22 июня 2011

Если вы делаете универсальный, вам не нужны два разных класса делегатов приложения. посмотрите эту ссылку (мой ответ), это может помочь вам сделать универсальное приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...