我正在为NSPasteboard编写许多对象,以便使用beginDraggingSessionWithItems:event:source:进行拖动操作
NSMutableArray *draggingItems = [NSMutableArray array];
for (NSUInteger i = 0; i < numItems; i++) {
NSPasteboardItem *pasteboardItem = [NSPasteboardItem new];
[pasteboardItem setDataProvider:[MyItem itemForIndex:i]
forTypes:@[@"com.test.FooType"]];
NSDraggingItem *draggingItem = [[NSDraggingItem alloc] initWithPasteboardWriter:pasteboardItem];
// ...
[draggingItems addObject:draggingItem];
}
[sourceView beginDraggingSessionWithItems:draggingItems
event:theEvent
source:self];在拖放目的地(在同一个应用程序中),我尝试使用readObjectsForClasses:options:接收这些项目,但我只接收其中一个。
- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender
{
// sender.draggingPasteboard.pasteboardItems contains all items
NSArray *myItems = [sender.draggingPasteboard readObjectsForClasses:@[[MyItem class]] options:nil];
// pasteboard:item:provideDataForType: is called for each object on the pasteboard...
// ...but this method only returns 1 object (the first one)??(请注意,如果您为类传递@[[NSPasteboardItem class]],则所有项都将不受修改地返回。)
知道为什么会发生这种情况吗?这里有样例项目 (有大量的NSLogs来查看项目实际上是写到黑板上的)。
发布于 2015-01-22 22:37:19
结果表明,-pasteboard:item:provideDataForType:的实现需要在项目上设置数据,而不是在桌面上--后者覆盖以前为其他项编写的数据。
https://stackoverflow.com/questions/28099359
复制相似问题