4

我是 Cocoa 的新手,我只是在尝试以编程方式创建一个窗口(不使用 Interface Builder)。

我在 Xcode 中启动了一个新的 Cocoa 应用程序,然后我从 Interface Builder 的 nib 文件中删除了该窗口,并将其替换为我自己的。

在主函数中,我添加代码:

NSWindow* myWindow; 

myWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(10,100,400,300)
  styleMask:NSTitledWindowMask
  backing:NSBackingStoreBuffered
  defer:NO];

当我尝试构建和运行应用程序时,我收到以下错误消息:

错误 (1002) 创建 CGSWindow

为什么会这样???顺便说一句,CGSWindow 是什么?

雷纳

4

4 回答 4

2

您可能还没有连接到窗口服务器。那是 NSApplication 的工作,所以先尝试创建共享应用程序

如果这没有帮助,我将完成我通常的应用程序布局:为自定义控制器创建一个 NSObject 子类,从您的应用程序委托实例化applicationWillFinishLaunching:它并将其释放applicationWillTerminate:,并让您的自定义控制器的init方法创建窗口。应用程序对象肯定会在此时运行(main除了 call 什么都不做NSApplicationMain,它获取/创建共享应用程序并告诉它运行),所以你绝对应该连接到窗口服务器,以便能够创建窗口.

于 2010-08-15T05:39:07.887 回答
0

将您编写的代码从您的 App Delegate 实现文件中移至以下方法 -

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
 // Insert code here to initialize your application 

 NSWindow* myWindow; 

 myWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(10,100,400,300)
             styleMask:NSTitledWindowMask
            backing:NSBackingStoreBuffered
              defer:NO];
}

它应该完美地加载您的窗口。

值得注意的是,在main函数中创建任何与 UI 相关的对象是不安全的,也不是一个好的做法。

于 2010-08-22T01:31:07.583 回答
0

您可能希望在 Cocoa 应用程序的 main() 函数中拥有的唯一代码是由 XCode 自动为您创建的(如果您正在使用它)。

我建议您将所需的代码添加到 applicationDelegate 的 -applicationDidFinishLaunching: 方法中

- (void) applicationDidFinishLaunching:(NSNotification *)aNotification {
    myWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(10,100,400,300)
        styleMask:NSTitledWindowMask
        backing:NSBackingStoreBuffered
        defer:NO];;
}
于 2010-09-11T06:19:35.263 回答
-1

如果您想从头开始显示一个完全空的窗口,这就是您需要的所有代码:

//if you used a template this will be already in the file:
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoReleasePool alloc] init];
    int retval=UIApplicationMain(argc,argv,nil,@"SimpleWindowAppDelegate");
    [pool release];
    return retVal;
}

@implementation SimpleWindowAppDelegate : NSObject <UIApplicationDelegate>
-(void) applicationDidFinishLaunching:(UIApplication *)application
{
    UIWindow *window=[[UIWindow alloc] initWithFrame:[[UIDevice mainScreen] bounds]];
    //You could create views and add them here:
    //UIView *myView=[[UIView alloc] initWithFrane:CGRectMake(0,0,50,50)];
    //[window addSubView:myView];
    //[myView release];
    [window makeKeyAndVisible];
}
@end
于 2010-08-28T20:34:05.010 回答