我有一个自定义的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/