Nano Hash - криптовалюты, майнинг, программирование

Какао: как правильно выпустить NSWindowController после исчезновения его окна

У меня есть приложение Cocoa, которое представляет экран запуска. После сбора некоторой информации от пользователя я проверяю и вижу, действительна ли она - если это так, я показываю зеленую галочку, затем жду 1 секунду и плавно перемещаю окно запуска в мое главное окно приложения. У меня есть 2 NSWindowControllers с 2 файлами xib окна.

На моем startupWindowController у меня настроен выход кнопки, который делает то, что я описал выше.

- (void)fadeOutAndPresentMainWindow {

    // Initialize the main window from XIB
    mainWindowController = [[MyMainWindowController alloc] init];
    NSWindow *mainWindow = [mainWindowController window];

    // Position the main window BEHIND the currently visible startup window
    NSWindow *startupWindow = [startupController window];
    [mainWindow setFrame:[startupWindow frame] display:NO];
    [mainWindow orderWindow:NSWindowBelow relativeTo:[startupWindow windowNumber]];

    // Now wait 1 second and fade out the startupWindow to reveal the main window
    // that is behind it.
    double delayInSeconds = 1.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

        [NSAnimationContext beginGrouping];
        [[NSAnimationContext currentContext] setCompletionHandler:^{

            // releases when closed
            [startupWindow close];

            // deallocates the startup controller *after* the animation? or not...
            [startupWindowController release]; 
            startupWindowController = nil;
        }];

        // Do the fade
        [[startupWindow animator] setAlphaValue:0.0f];
        [NSAnimationContext endGrouping];

        // Now make the main window key
        [mainWindow makeKeyWindow];
    });
}

Все это прекрасно работает, но есть одна проблема: если пользователь нажимает кнопку с IBOutlet во время анимации затухания, приложение аварийно завершает работу. MyStartupController performSelector:withObject:]: message sent to deallocated instance 0x102c00a90. Итак, проблема в том, что startupController освобождается до завершения анимации.

Итак, я думаю, я не уверен, как правильно освободить этот оконный контроллер после его исчезновения. Любые идеи, как это сделать?


  • Если он отпускается, то сохраните его, создайте надежный указатель, который будет удерживать объект некоторое время, пока анимация не завершится. 06.09.2013
  • Я выпускаю его после завершения анимации. Блок завершения не вызывается в нужное время. 06.09.2013
  • Лучше просто не использовать заставки... 06.09.2013
  • Хотя я согласен с тем, что экраны-заставки используются слишком часто и часто не нужны, для них все еще есть допустимые варианты использования. Я считаю, что мое приложение заслуживает этого. Кроме того, этот вопрос вполне актуален в других случаях использования, не связанных с заставкой; Например, экран входа в систему. 06.09.2013

Ответы:


1
  • Класс, в котором вы инициализировали экземпляр оконного контроллера 06.09.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..