cocoa黏贴板和Nil-Target Action

来源:互联网 发布:淘宝刷钻软件 编辑:程序博客网 时间:2024/04/30 14:36

黏贴板:

黏贴板操作,在MAC系统当中是一个多个进程间通信的一种方式。他的实现原理是mac当中后台运行了一个pboard的黏贴板的进程,然后A程序会使用NSPasteboard将需要黏贴的数据拷贝到这个pboard进程中,然后B程序,通过NSPasteboard从pboard进程获取数据。

MAC黏贴板有一个特点就是,他可以黏贴不同类型的数据当黏贴板当中。

基本流程是,A程序首先会放个数组到黏贴板程序中,告诉黏贴板这个数据支持哪些数据类型。B程序会询问黏贴板,有哪些数据类型可用,然后读取这些数据。


NSPasteboard类,有很多方法,比较重要的是:

+ (NSPasteboard *)generalPasteboard    返回一个黏贴板,以供使用

+ (NSPasteboard *)pasteboardWithName:(NSString *)name   返回一个特定名称的黏贴板,以供使用。

- (BOOL)setData:(NSData *)data forType:(NSString *)dataType  向黏贴板写数据

- (NSData *)dataForType:(NSString *)dataType 从黏贴板读数据


Nil-target action


这部分的描述,说实话笔者也不是非常清楚,尝试着理解一下。

对于cut、copy、paste,通常这些操作,应该是当前选中的控件进行,比如说当前选中了对话框那么这些操作就应该是针对这些对话框的,如果当前选择的是edit,那么就应该是针对edit的。

那么cocoa如何实现上述过程的哪?答案就是NIL-TARGET ,通过将控件的target设置为nil实现,方法是将copy,cut操作拖动到First Responder,从而实现的。


其实是,当一个控件的action为nil时,cocoa会按照如下顺序,查找对应的响应。

1、key windows的first respondre

2、key window的委托

3、如果是Document模板,就查NSWindowcontroller,以及NSDocument本身。

4、main windows 与key windows相同的部分再查找一次。

5、NSApplication的实例

6、NSApplication的委托

7、NSDocumentController文档的控制器