代码之家  ›  专栏  ›  技术社区  ›  Jeffrey Kern

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

  •  0
  • Jeffrey Kern  · 技术社区  · 16 年前

    我正在将我在visualstudio2008中开发的一个应用程序移植到Cocoa。我目前正在对Cocoa做一个“随用随学”的方法,这样我就可以在更小、更简单的项目中尝试不同的想法和技术,并最终将它们组合成一个大的应用程序。

    我的程序逻辑如下(在一个简化的意义上)。清单上的项目是我老板要求的。

    1. 第1a条。验证CD程序是否在驱动器中。
    2. 验证许可证。如果找到并且有效,请跳到步骤7
    3. 显示许可协议。
    4. 显示序列号提示。
    5. 验证并保存序列号。
    6. 隐藏所有以前的窗口。
    7. 加载主应用程序窗口
    8. 截获来自主应用程序窗口的请求和命令,包括复制主应用程序窗口
    9. 用户请求时退出程序

    对于这种类型的应用,最好的选择是什么?从我问的另一个问题中,我发现我应该将“主应用程序”窗口与其他窗口分开保存在一个单独的XIB文件中,因为我可能需要克隆并与之交互。

    1 回复  |  直到 6 年前
        1
  •  1
  •   RyanWilcox    16 年前

    所以这其中的一部分要归结到组织上。正如Julien提到的,您需要一个YouappnameApplicationDelegate类—实际上,Xcode将在您创建项目时为您创建和设置这个类。

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

    步骤3到5您可能希望在另一个类中实现。注册WindowController之类的。您甚至可能希望在另一个nib文件(不在Xcode提供的MainMenu.nib文件中)中创建此窗口。在YouappnameApplicationDelegation的applicationdifinishlaunching方法中,可以加载这个nib(参见下面的代码示例)。这样你的代码组织得很好——这才是Cocoa真正指导你去做的。

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

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

    RegistrationWindowController应该是NSWindowController的子类。