非基于文档的Cocoa应用程序中的多个窗口

非基于文档的Cocoa应用程序中的多个窗口,cocoa,osx-lion,nswindowcontroller,Cocoa,Osx Lion,Nswindowcontroller,我正在构建一个非基于文档的cocoa应用程序,我希望其行为如下: 主窗口包含一个带有项目列表(由核心数据支持)的表视图 每个项目都应该在自己的窗口中打开 同样,单击new item按钮应打开一个新的item窗口,可同时打开多个这样的窗口 在当前处理表视图的my app delegate中,我实现了以下方法来打开一个新的项目窗口: -(IBAction)newItem:(id)sender { MyItemWindowController *itemController = [[My

我正在构建一个非基于文档的cocoa应用程序,我希望其行为如下:

  • 主窗口包含一个带有项目列表(由核心数据支持)的表视图
  • 每个项目都应该在自己的窗口中打开
  • 同样,单击new item按钮应打开一个新的item窗口,可同时打开多个这样的窗口
在当前处理表视图的my app delegate中,我实现了以下方法来打开一个新的项目窗口:

-(IBAction)newItem:(id)sender {

    MyItemWindowController *itemController = [[MyItemWindowController alloc]initWithWindowNibName:@"MyItemWindowController"];

    [itemController showWindow:self];

}
窗口确实显示,,但它几乎立即消失。但是,如果我实例化了一个窗口控制器,它是appDelegate的一个实例变量,那么该窗口确实会保持不变,但显然,在任何给定的时间,只有一个这样的窗口可以保持打开状态

我真的很想拥有上面提到的功能,但不想使用基于文档的体系结构,因为我不需要将项目作为文档保存到磁盘


有什么建议吗?我知道我一定错过了一些非常基本的东西,但我就是想不出来

我猜您的窗口是因为ARC而消失的(对它不太熟悉,所以我不确定这是否是原因),所以请按您所说的做,但不要使用MyItemWindowController作为实例变量,有一个数组作为实例变量,它可以在需要另一个新窗口时添加一个新窗口控制器。

我猜您的窗口会因为ARC而消失(不太熟悉,所以我不确定这是否是原因),所以只需照您所说的做,而不是用MyItemWindowController作为实例变量,使用一个数组作为实例变量,在需要另一个新窗口时添加一个新的窗口控制器。

谢谢,这很有效。。事实上,我之前尝试过这样做,但忘记初始化数组:)以及如何在关闭窗口时释放每个窗口?嗯,我想你只要告诉AppDelegate的窗口数组删除与关闭窗口相等的对象即可。谢谢,这很有效。。事实上,我之前尝试过这样做,但忘记初始化数组:)以及如何在关闭窗口时释放每个窗口?嗯,我认为您只需告诉AppDelegate的窗口数组移除与关闭窗口相等的对象。