假设我有一个NSWindow类,它有几个鼠标和触控板移动事件 例如这段代码
恕我直言,我认为这应该是很好的编程,它类似于将一个按钮的动作指向控制器中的方法。 在我的MyWindow.m类中(我在IB中设置了窗口类)@implementation MyWindow
- (void)swipeWithEvent:(NSEvent *)event {
NSLog(@"Track Pad Swipe Triggered");
/* I want to add something like this
Note that, Appdelegate should be existing delegate,
not a new instance, since I have variables that should be preserved*/
[AppDelegate setLabel];
}
@end
在我的AppDelegate.h中我有
@interface AppDelegate : NSObject <NSApplicationDelegate>
{
IBOutlet NSTextField *label;
}
-(void)setLabel;
@end
在我的AppDelegate.m中我有
-(void)setLabel
{
[label setStringValue:@"swipe is triggered"];
}
我尝试了#import @class,[[... alloc] init],在IB中委托引用(我创建了MyWindow的对象类 - 感谢上一个问题的答案) 后者似乎是最接近的一个,如果两个类都是委托,它可以工作,所以我可以成功地从第二个控制器(委托类)的IBAction方法中的按钮调用“setLabel”动作, 但是这个View事件看起来似乎没有与代理的动作进行通信,尽管他们的代码正在执行。
答案 0 :(得分:1)
您正在向AppDelegate类发送消息,而不是可从NSApplication单例([NSApplication sharedApplication])
访问的AppDelegate类实例[AppDelegate setLabel];
这是错误的,让代表这样做:
AppDelegate* appDelegate = (AppDelegate*)[[NSApplication sharedApplication] delegate];
然后将消息发送到该实例:
[appDelegate setLabel];