Я пишу несколько объектов в 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, чтобы увидеть, что элементы фактически записываются на монтажный стол).