我是 MacRuby 和 Cocoa 的完整 n00b,所以在回答时请记住这一点 - 我需要很多细节和解释。:)
我已经建立了一个简单的项目,其中有 2 个窗口,这两个窗口都是用 Interface Builder 构建的。第一个窗口是使用表格视图的简单帐户列表。它在表格下方有一个“+”按钮。当我单击 + 按钮时,我想显示一个“添加新帐户”窗口。
我还有一个AccountsController < NSWindowController
和一个AddNewAccountController < NSWindowController
类,设置为这些窗口的代表,连接了适当的按钮单击方法,以及引用所需窗口的插座。
当我单击“帐户”窗口中的“+”按钮时,我会触发以下代码:
@add_account.center
@add_account.display
@add_account.makeKeyAndOrderFront(nil)
@add_account.orderFrontRegardless
这在我第一次单击 + 按钮时效果很好。一切都出现了,我可以输入我的数据并将其绑定到我的模型。但是,当我关闭添加新帐户表单时,事情开始变得糟糕。
如果我将添加新帐户窗口设置为关闭时释放,那么我第二次单击 + 按钮时,该窗口仍会弹出但它被冻结。我无法单击任何按钮、输入任何数据,甚至无法关闭表单。我认为这是因为表单的代码已经发布,所以没有消息循环处理表单......但我对此并不完全确定。
如果我将添加新帐户窗口设置为关闭时不释放,那么我第二次单击 + 按钮时,窗口显示正常并且可用 - 但它仍然包含我之前输入的所有数据......仍然绑定到我以前的 Account 类实例。
我究竟做错了什么?当我单击 Accounts 表单上的 + 按钮时,创建 Add New Account 表单的新实例、创建新 Account 模型、将该模型绑定到表单并显示表单的正确方法是什么?
...这一切都在 OSX 10.6.6、64 位和 XCode 3.2.4 上完成