无法写入常规粘贴板

时间:2014-04-16 18:54:57

标签: macos cocoa sandbox nsview nspasteboard

我有一个自定义NSView,可以拖动自定义核心数据对象。我通过调用此方法开始拖动过程​​:

[self dragImage:graphicItem.dragImage at:point offset:CGSizeZero event:theEvent pasteboard:pb source:self slideBack:YES];

在调用上面的方法之前,我抓住一般的粘贴板并设置如下标题:

pb = [NSPasteboard generalPastebaord];
[pb setString:graphicItem.itemDescription forType:(NSString *)kUTTypeText];

但在我设置字符串后立即调用:

[pb stringForType:(NSString *)kUTTypeText]

我一无所获。

如果我创建这样的粘贴板:

pb = [NSPasteboard pasteboardWithName:"myPasteBoard"]

确实有效。 所以,我尝试了另一个标准的粘贴板

pb = [NSPasteboard pasteboardWithName: NSDragPboard];

但是这个也不允许我写数据。

我从mouseDragged:(NSEvent *)事件中调用此方法; 我的应用程序是沙盒。 有什么想法吗?

2 个答案:

答案 0 :(得分:2)

使用普通纸板时,您必须清除其内容,以便为新物品做好准备 来自docs

  

清除粘贴板的现有内容,为新内容做好准备   内容。这是在粘贴板上提供数据的第一步。

Apple还为纯文本字符串粘贴板内容提供字符串常量:NSPasteboardTypeString

以下代码有效,并使用常规粘贴板:

NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
[pasteboard clearContents];
[pasteboard setString:@"TestString" forType:NSPasteboardTypeString];
NSLog(@"%@", [pasteboard stringForType:NSPasteboardTypeString]);

答案 1 :(得分:0)

在写入粘贴板之前缺少

[pb declareTypes:@[(NSString *)kUTTypeText] owner:self]