NSProgressBar startAnimation称为FROM ManiMenu动作

时间:2011-05-25 15:54:54

标签: objective-c cocoa interface-builder appkit nsprogressindicator

StackOverflow中的第一个问题以及Cocoa newbye,此外我正在使用XCode 4(请好心!)

情景:

一个简单的 NSPersistentDocument 多窗口:每个文档都有一个 window.nib 和一个附加的 WindowController 当我按下 WINDOW TOOLBAR 中的按钮时,应用程序运行 NSTask (在后台)。

在窗口中(在View中)我决定放置一个漂亮的NSProgressIndicator(不确定),当任务结束时动画,并在任务结束时停止动画(我通过通知收集任务消息)。

示例代码:

NSButton - > IBAction - > WindowController中的方法

- (IBAction)launchSim:(id)sender 
{
[simcell launchTask];
[progBar startAnimation:self];
   .... more code ...
}

一切都很美好。

现在(像往常一样在这种情况下)你得到一个奇怪的错误,你开始变得没有成效:

我决定也从MainMenu(来自NSMenuItem)运行相同的Action:

在MainMenu.xib中:

NSMenuItem(“RUN”) - > FirstResponder - >第一响应者中的用户定义的操作:launchSim(类型ID)

RUN菜单项正确运行任务(我有NSLog DEBUG消息)但是progressBar的动画(startAnimation)没有启动!

两项行动的差异:

  • 从WindowController
  • 拥有的Nib文件中调用第一个(工作)
  • 从MainMenu.xib调用第二个(不工作)并发送给FirstResponder

这两个动作都正确执行了方法中代码的其他部分,但是如果我从菜单调用动作,我看不到任何进度指示器的动画。

我错过了什么?

谢谢和最诚挚的问候

2 个答案:

答案 0 :(得分:0)

您无需对第一响应者执行任何操作即可将菜单项连接到操作。

使菜单项执行操作的方式与使按钮执行操作的方式完全相同:

  • 打开nib文件。
  • 转到菜单并导航到应该触发操作的“运行”菜单项。
  • Ctrl-单击菜单项并将连接线拖动到窗口控制器。
  • 释放拖动时,应该会弹出一个菜单。点击launchSim:你应该全部设置。

答案 1 :(得分:0)

我回答自己,因为我发现了这个错误:

结构是“高级”NSPersistentDocument的经典结构:

  1. 文档的一个类
  2. NSWindowController的一个子类来控制视图
  3. 这遵循MVC架构:

    • 型号:文件
    • 控制器:附在窗口
    • 查看:窗口

    我的错误是在视图中创建一个NSObject并将他链接到NSWindowController,而正确的方法是将NSWindowController的SubClass设置为文件所有者,现在神奇地, MainMenu启动动画。这在某种程度上与响应者链有关,但远离我目前对Cocoa的了解。如果有人可以评论和解释....