【问题标题】:Creating a Multiwindowed Cocoa Program - Launching Procedure Suggestions?创建多窗口 Cocoa 程序 - 启动程序建议?
【发布时间】:2011-02-25 14:32:42
【问题描述】:

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

我的程序逻辑如下(在简化意义上)。清单中的项目是我老板规定的。

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

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

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

【问题讨论】:

  • 对于问题的最后一部分:通常您有一个 YourappnameApplicatioDelegate 类,该类将在应用启动时被实例化。你应该从这里实例化你的其他类。您几乎从不使用 Obj-C 的 main 方法。其余的我不知道,我只在 iPhone 上编程。
  • 谢谢。这应该对我有很大帮助;更糟的是,我可以在那里放置“全局”变量和对象。
  • 此外,没有主要的方法。对象有方法;方法仅作为类的一部分或类的实例存在。 main.m 文件没有定义类;它只包含main 函数。函数永远不是对象的一部分。因此,函数和方法是两个不同的东西。

标签: objective-c macos cocoa porting


【解决方案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 的子类。

这应该会让你在研究中走得更远,希望对你有所帮助!

【讨论】:

  • 非常感谢!现在我已经处理了每个组件的零碎部分——显示一个 RTF 并使其只读,生成和验证序列号,在窗口中播放视频等。彼此独立地开发和完成每个步骤。我只是在如何将所有这些点点滴滴粘在一起的问题上遇到问题。谢谢你瑞恩! :)
猜你喜欢
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
相关资源
最近更新 更多