如何解决NSProgressBar startAnimation从ManiMenu动作调用
| StackOverflow和Cocoa newbye中的第一个问题,此外,我正在使用XCode 4(请客气!) 场景: 一个简单的NSPersistentDocument多窗口:每个文档都有一个window.nib和一个附加的WindowController 当我按下WINDOW TOOLBAR中的按钮时,应用程序运行NSTask(在后台)。 我决定在窗口中(在视图内)放置一个不错的NSProgressIndicator(不确定),该属性在任务开始时进行动画处理,并在任务结束时进行动画处理(我通过通知收集任务消息)。 样例代码: WindowController中的NSButton-> IBAction->方法- (IBAction)launchSim:(id)sender
{
[simcell launchTask];
[progBar startAnimation:self];
.... more code ...
}
一切正常且完美。
现在(像在这种情况下一样),您遇到一个奇怪的错误,并且开始变得毫无用处:
我决定也要从MainMenu(从NSMenuItem)运行相同的Action:
在MainMenu.xib中:
NSMenuItem(\“ RUN \”)-> FirstResponder-> First Responder中的用户定义的操作:launchSim(类型ID)
RUN菜单项正确运行任务(我有NSLog DEBUG消息),但是progressBar的动画(startAnimation)无法启动!
2个动作之间的差异:
第一个(工作)是从WindowController拥有的Nib文件中调用的
第二个(不起作用)从MainMenu.xib调用并发送到FirstResponder
这两个动作均正确执行了方法中代码的另一部分,但是如果我从菜单中调用该动作,则看不到进度指示器的任何动画。
我想念什么?
谢谢和最好的问候
解决方法
您无需对第一响应者进行任何操作即可将菜单项连接到操作。
使菜单项执行动作的方式与使按钮执行动作的方式完全相同:
打开笔尖文件。
转到菜单并导航到应该触发该操作的\“ Run \”菜单项。
按住Ctrl键单击菜单项,然后将连接线拖动到窗口控制器。
释放拖动时,应该会弹出一个菜单。单击launchSim :,您应该已经准备就绪。
,好吧,我对自己说,因为我发现了这个错误:
该结构是“高级” NSPersistentDocument的经典结构:
一类文件
NSWindowController的一个子类来控制视图
这遵循MVC架构:
型号:文件
控制器:附在窗户上
查看:窗口
我的错误是在视图中创建一个NSObject并将其链接到NSWindowController,而正确的方法是将NSWindowController的子类设置为文件所有者,现在神奇的是,MainMenu也开始动画。这在某种程度上与响应者链有关,但是与我目前对可可的了解相去甚远。如果有人可以评论和解释...。