Сначала попробуйте создать новое окно в коде, как здесь: Как программно создать окно Какао?
И обернуть весь код для запуска в главном потоке.
Это сработало для меня:
MyDialog (NSWindowController)
@interface MyDialog : NSWindowController
- (instancetype)initWithFrame:(NSRect)frame;
- (void)runModal;
@end
@implementation MyDialog
- (instancetype)initWithFrame:(NSRect)frame {
NSWindowStyleMask windowMask = NSWindowStyleMaskTitled
| NSWindowStyleMaskClosable | NSWindowStyleMaskResizable;
NSWindow *window = [[NSWindow alloc] initWithContentRect:frame
styleMask:windowMask
backing:NSBackingStoreBuffered
defer:NO];
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(windowWillClose:)
name:NSWindowWillCloseNotification
object:nil];
return [super initWithWindow:window];
}
- (void)dealloc {
[NSNotificationCenter.defaultCenter removeObserver:self];
}
- (void)runModal {
[[NSApplication sharedApplication] runModalForWindow:self.window];
}
- (void)windowWillClose:(NSNotification *)notification {
[[NSApplication sharedApplication] stopModal];
}
@end
Внутренняя функция представления:
[NSOperationQueue.mainQueue addOperationWithBlock:^{
NSRect frame = NSMakeRect(0, 0, 200, 200);
MyDialog *dialog = [[MyDialog alloc] initWithFrame:frame];
[dialog runModal];
NSLog(@"done");
}];
Если это работает, вы, вероятно, можете добиться того жерезультат с помощью вашего Window.xib, но вы должны убедиться, что соответствующий файл Window.nib (скомпилированный xib) присутствует и его можно найти во время выполнения из вашего плагина.Если вы разместите этот файл где-нибудь в ресурсах плагина, вы можете использовать initWithWindowNibPath:
, чтобы указать полный путь к нему.