Загрузка главного окна в приложении DidFinishLaunching в приложении Какао - PullRequest
2 голосов
/ 03 января 2012

В приложении Cooca MainMenu.xib настраивается для вас в стандартном шаблоне.Этот кончик был также настроен с делегатом приложения.В файле info.plist ключ "Main enib file bas ename" устанавливает файл nib для загрузки при запуске.

Я хочу, чтобы приложение запускалось, если это возможно, без nib, я хочу загрузить MainMenu.xib по адресуapplicationDidFinishLaunching в главном делегате приложения.

Возможно ли это?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2014

Во-первых, закомментируйте NSApplicationMain в файлах поддержки -> main.m.NSApplicationMain () загружает основной кончик, упомянутый в вашем Info.plist, поэтому пропустите его.Вместо этого настройте приложение, делегируйте и запустите приложение:

int main(int argc, const char * argv[])
{
    //return NSApplicationMain(argc, argv);

    @autoreleasepool {
        NSApplication * application = [NSApplication sharedApplication];
        MYAppDelegate* appDelegate = [[MYAppDelegate alloc] init];

        [application setDelegate:appDelegate];
        [application run];
    }

    return EXIT_SUCCESS;
}

Затем в applicationDidFinishLaunching: function делегата приложения вызовите нечто похожее на createMainWindow:

- (void)createMainWindow
{
    self.wincon = [[MYCustomWindowController alloc] initWithWindowNibName:@"MainMenu"];
    self.window = self.wincon.window; // window property in appdelegate created for single-view app
    // Also had to connect About: to application's orderFrontStandardAboutPanel
}

Файл MainMenu.xib'sПользовательский класс владельца должен быть переключен на MYCustomWindowController из приложения.

Если MainMenu.xib имеет окно, как в этом примере, его «ссылка на выход» должна быть подключена к файлу Owner-> window.

Если вы начали с одного приложения представления, УДАЛИТЕ объект Делегат приложения из MainMenu.xib - в противном случае Xib создаст второй экземпляр вашего делегата приложения.Это может быть ужасно, если вы ссылаетесь на что-то вроде MYAppDelegate.managedObjectContext.Если вам нужно привязать к делегату приложения, вы можете привязать к приложению с помощью ключевого пути Delegate.managedObjectContext.

Почему я это сделал?Потому что иногда мое приложение запускается с графическим интерфейсом, а иногда нет.

1 голос
/ 03 января 2012

Это возможно, но редко стоит хлопот ИМО.Если у вас уже есть пакет, есть небольшая стоимость, включая небольшой файл пера (только меню; нет окна).Если вы хотите загрузить остальную часть вашего интерфейса из отдельного файла пера после запуска, это нормально.Но я рекомендую разрешить MainMenu.nib загружаться и предоставлять главное меню.(Вам не ясно, какую проблему вы пытаетесь решить с помощью вашего подхода.)

Тем не менее, Lap Cat написал серию статей на эту тему под названием «Работа без пера"это стоит прочитать.Вам понадобится последняя статья Империя наносит ответный удар , где он включает ссылку на свой проект nibless.Его техника все еще работает в 10.7.

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