Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何从目标C/C中的视图类事件调用控制器类(委托)方法_Objective C_Cocoa - Fatal编程技术网

Objective c 如何从目标C/C中的视图类事件调用控制器类(委托)方法

Objective c 如何从目标C/C中的视图类事件调用控制器类(委托)方法,objective-c,cocoa,Objective C,Cocoa,假设我有一个NSWindow类,它有几个鼠标和触摸板移动事件 例如,此代码 嗯,我认为这应该是一个很好的编程,它类似于将按钮的动作指向控制器中的方法。 在MyWindow.m类中我有(在IB中我将window类设置为它) 在我的AppDelegate.h中 @interface AppDelegate : NSObject <NSApplicationDelegate> { IBOutlet NSTextField *label; } -(void)setLabel; @end

假设我有一个NSWindow类,它有几个鼠标和触摸板移动事件 例如,此代码

嗯,我认为这应该是一个很好的编程,它类似于将按钮的动作指向控制器中的方法。 在MyWindow.m类中我有(在IB中我将window类设置为它)


在我的AppDelegate.h中

@interface AppDelegate : NSObject <NSApplicationDelegate>
{
IBOutlet NSTextField *label;
}
-(void)setLabel;
@end
我已经尝试了IB中的委托引用#import@class、[[…alloc]init](我为MyWindow创建了一个对象类,这要感谢我前面问题的答案) 后者似乎是最接近的一个,如果两个类都是委托,它就可以工作,因此我可以从第二个控制器(委托类)的iAction方法中的按钮成功调用“setLabel”操作,
但是此视图事件似乎没有与代理的操作通信,尽管它们的代码正在执行。

您正在向AppDelegate类发送消息,而不是从NSApplication singleton([NSApplication sharedApplication]可访问的AppDelegate类的实例)

这是错误的,要让学员这样做:

AppDelegate* appDelegate = (AppDelegate*)[[NSApplication sharedApplication] delegate];
然后将消息发送到该实例:

[appDelegate setLabel];

哇,谢谢你。你们从哪里学的!我无意中阅读了许多书籍/网站/苹果的文档,但没有任何成功,但就这一行代码为我做了一切。Objective-C/Cocoa development有很棒的文档。不仅由苹果公司提供。这里是一个集合:在Cocoa中,您通过全局变量
NSApp
访问应用程序对象,因此获取委托的行可以是
[NSApp delegate]
@JoshCaswell nice,不知道捷径。这很好。让我抓狂的是,他们没有在iOS中包含这些。
[AppDelegate setLabel];
AppDelegate* appDelegate = (AppDelegate*)[[NSApplication sharedApplication] delegate];
[appDelegate setLabel];