创建多窗口可可程序 - 启动程序建议?

时间:2010-05-30 01:47:34

标签: objective-c cocoa macos port

我正在将我在Visual Studio 2008中开发的应用程序移植到Cocoa。我目前正在对Cocoa进行“随时随地学习”的方法,因此我可以在更小,更简单的项目中尝试不同的想法和技术,并最终将它们组合成一个大型应用程序。

我的程序逻辑如下(在一种愚蠢的意义上)。列表中的项目由我的老板强制执行。

  1. 应用程序已启动 1A。验证CD程序是否在驱动器中。
  2. 验证许可证。如果找到并且有效,请跳至步骤7
  3. 显示许可协议。
  4. 显示序列号提示。
  5. 验证并保存序列号。
  6. 隐藏所有先前的窗口。
  7. 加载主应用程序窗口
  8. 拦截来自主应用程序窗口的请求和命令,包括制作一个重复的主应用程序窗口
  9. 用户要求时退出程序
  10. 这类申请最好的选择是什么?从我提出的另一个问题中,我发现我应该将“主应用程序”窗口保留在与其余文件不同的单独XIB文件中,因为我可能需要克隆并与之交互。

    我知道,由于Cocoa和Objective-C基于C,因此某处有一个Main方法。但是你们都建议作为这样的应用程序的起点?

1 个答案:

答案 0 :(得分:1)

因此,其中一些归结为组织。就像Julien提到的那样,你需要一个YouappnameApplicationDelegate类 - 事实上,Xcode会在你创建项目时为你创建和设置它。

实现applicationDidFinishLaunching方法(也应该由Xcode提供给你),并在那里实现步骤1和2的逻辑(以及步骤7,8,9)。

步骤3到5你可能想要在另一个类中实现。 RegistrationWindowController,或类似的东西。您甚至可能希望在另一个nib文件中创建此窗口(不在Xcode为您提供的MainMenu.nib文件中)。在YouappnameApplicationDelegation的applicationDidFinishLaunching方法中,您将加载此nib(请参阅下面的代码示例)。这样你的代码组织得很好 - 这就是Cocoa真正指导你做的事情。

好的,现在如何加载新的nib文件:

myInstanceVariable = [[RegistrationWindowController alloc] initWithWindowNibName: @"MyNibName"];
[myInstanceVariable showWindow: self];

RegistrationWindowController应该是NSWindowController的子类。

这应该会让你在研究中走很长的路,希望它有所帮助!