这是我在applicationDidFinishLaunching函数中的代码,
// Create window
NSWindow *window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 400, 300)
styleMask:(NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask)
backing:NSBackingStoreBuffered defer:NO];
//Create gl view
NSRect frame = [window contentRectForFrameRect:[window frame]];
MyOpenGLView *glView = [[MyOpenGLView alloc] initWithFrame:frame];
[window setContentView:glView];
[window makeFirstResponder:glView];
// Show up
[window makeKeyAndOrderFront:self];
应用程序构建并运行。但是当它运行时,窗口似乎是全屏的。换句话说,我在左上角得到了应用程序的名称,屏幕上没有其他内容发生变化。它像我的屏幕大小的空窗口。为什么会发生这种情况,我该如何解决?
附加信息:MyOpenGLView类中的initWithFrame函数,
self = [super initWithFrame:frameRect];
[self myInit];
return self;
答案 0 :(得分:0)
我猜你正在使用自动参考计数(ARC)而不是手动参考计数。要查看,这是您的代码:
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
NSWindow *window = [[NSWindow alloc] initWithContentRect:
NSMakeRect(0, 0, 400, 300) styleMask:(NSTitledWindowMask | NSClosableWindowMask |
NSMiniaturizableWindowMask | NSResizableWindowMask)
backing:NSBackingStoreBuffered defer:NO];
//Create gl view
NSRect frame = [window contentRectForFrameRect:[window frame]];
MyOpenGLView *glView = [[MyOpenGLView alloc] initWithFrame:frame];
[window setContentView:glView];
[window makeFirstResponder:glView];
// Show up
[window makeKeyAndOrderFront:self];
}
在ARC下,您在此方法中创建的NSWindow
只会持续与方法一样长。换句话说,它将被创建,显示为瞬间(如果有的话),然后立即被释放并从屏幕上删除。为了使其持久化,您应该将其定义为实例变量。例如:
MDAppController.h:
@interface MDAppController : NSObject
@property (nonatomic, strong) NSWindow *window;
@end
MDAppController.m:
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
self.window = [[NSWindow alloc] initWithContentRect:
NSMakeRect(0, 0, 400, 300)
styleMask:(NSTitledWindowMask | NSClosableWindowMask |
NSMiniaturizableWindowMask | NSResizableWindowMask)
backing:NSBackingStoreBuffered defer:NO];
// or
// _window = ....
// ....
// Show up
[self.window makeKeyAndOrderFront:self];
// or
// [_window makeKeyAndOrderFront:self];
}
在这里,您将实例变量window
设置为您创建的NSWindow
,因为该ivar定义为strong,它将在该方法返回后保留。