Ошибка утверждения 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];
И обработка событий выхода по-другому решала эту проблему.