我有一个自定义的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 *)event;调用此方法;
我的应用程序是沙盒化的。
有任何想法吗 ?

最佳答案

使用常规粘贴板时,必须清除它的内容才能为新项目做准备。
docs


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


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

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

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

关于macos - 无法写入常规粘贴板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23117865/

10-11 11:55