2

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

4

2 回答 2

3

使用普通粘贴板时,您必须清除其中的内容,以便为新项目做好准备。
文档

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

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

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

NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
[pasteboard clearContents];
[pasteboard setString:@"TestString" forType:NSPasteboardTypeString];
NSLog(@"%@", [pasteboard stringForType:NSPasteboardTypeString]);
于 2014-04-16T20:38:27.890 回答
0

在写入粘贴板之前丢失

[pb declareTypes:@[(NSString *)kUTTypeText] owner:self]
于 2014-04-16T20:24:43.493 回答