Ошибка утверждения NSApplication при выходе из полноэкранного режима

Я написал приложение corevideo, в котором есть одно окно с одним представлением контента.

Размер окна изменится должным образом. Я добавил код, чтобы заставить его принимать полноэкранное событие, которое окно делает и работает должным образом, док-станция и меню автоматически скрываются и появляются при наведении курсора мыши в ожидаемых местах.

Однако, когда я выхожу из полноэкранного режима, я получаю ошибку утверждения в AppKit NSWindow_FullScreen.mкоторый я не могу найти нигде в полноэкранной документации, а также не могу найти сообщение об ошибке при поиске в Google. Я пробовал добавить наблюдателя заNSWindowDidExitFullScreenУведомление, но утверждение остается. Я надеюсь, что кто-нибудь может помочь.

2020-05-10 10:01:16.812 a.out[45616:2858300] *** Assertion failure in -[NSWindow _didExitFullScreen], /BuildRoot/Library/Caches/com.apple.xbs/Sources/AppKit/AppKit-1561.61.100/FullScreen.subproj/NSWindow_FullScreen.m:469
2020-05-10 10:01:16.812 a.out[45616:2858300] content controller was not cleaned up properly

Я не уверен, что это называется Контроллером Контента, Я попытался добавить контроллер окна, но он все еще не работает, Я не уверен, что нужно очистить, так как мое приложение все еще работает и отображается в окне.

Вот мое минимальное приложение, в котором обнаружена проблема. Скомпилировать с помощью:gcc -framework AppKit example.m

#import <AppKit/AppKit.h>

int main (int argc, char **argv)
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    [NSApplication sharedApplication];
    [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];

    NSUInteger windowStyle =  NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskResizable;
    NSRect wr = NSMakeRect(0,0,640,480);

    NSWindow * window = [[NSWindow alloc] initWithContentRect:wr
                                          styleMask:windowStyle
                                          backing:NSBackingStoreBuffered
                                          defer:NO];
    [window autorelease];

    NSWindowCollectionBehavior behavior = [window collectionBehavior];
    behavior |= NSWindowCollectionBehaviorFullScreenPrimary;
    [window setCollectionBehavior:behavior];

    [[NSNotificationCenter defaultCenter] 
        addObserver:NSApp 
        selector:@selector(terminate:) 
        name:NSWindowWillCloseNotification 
        object:nil];

    [window orderFrontRegardless];

    [NSApp run];

    [pool drain];
    return 0;
}

1 ответ

Причина этой проблемы в том, что NSWindowWillCloseNotification отправляется, когда окно выходит из полноэкранного режима, удаляя строки:

  [[NSNotificationCenter defaultCenter] 
    addObserver:NSApp 
    selector:@selector(terminate:) 
    name:NSWindowWillCloseNotification 
    object:nil];

И обработка событий выхода по-другому решала эту проблему.

Другие вопросы по тегам