我有一个自定义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 *)事件中调用此方法; 我的应用程序是沙盒。 有什么想法吗?
答案 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]