我有一个可可应用程序,我想在其中接受来自 mail.app 的电子邮件,并将其拖入应用程序的主窗口。我在我的 applicationDidFinishLaunching 中有:
[_window registerForDraggedTypes:
[NSArray arrayWithObjects:
NSFilenamesPboardType,
(NSString *)kPasteboardTypeFileURLPromise, nil]]; //kUTTypeData
[_window setDelegate:(id) self];
这很好用,我可以在 performDragOperation 中收到一个文档:使用
NSArray * files = [sender namesOfPromisedFilesDroppedAtDestination:url];
但是,这只让我一个接一个地拖动电子邮件。如果我标记了几封电子邮件,一切似乎都很好,直到我放弃,然后什么也没有发生。performDragOperation 甚至没有被调用。
我试图将 kUTTypeData 添加到 registerForDraggedTypes...,然后我调用了 performDragOperation...,但是我不能使用 namesOfPromisedFilesDroppedAtDestination:url,因为它返回一个 nil 指针。
当我将 kUTTypeData 包含在寄存器中时...我将其包含在 performDragOperation 中以查看拖动中的类型:
pboard = [sender draggingPasteboard];
NSLog(@"perform drag entered, %@", [pboard types]);
结果如下:
2013-07-25 15:09:50.771 BO2ICAL[1672:303] perform drag entered, (
"dyn.ah62d4rv4gu8y4zvanr41a3pwfz30n25wqz4ca5pfsr30c35feb4he2pssrxgn6vasbu1g7dfqm10c6xeeb4hw6df",
"MV Super-secret message transfer pasteboard type",
"dyn.ah62d4rv4gu8zg7puqz3c465fqr3gn7bakf41k55rqf4g86vasbu1g7dfqm10c6xeeb4hw6df",
"Super-secret Automator pasteboard type"
)
虽然单个电子邮件的列表是:
2013-07-25 15:14:30.096 BO2ICAL[1672:303] perform drag entered, ( "dyn.ah62d4rv4gu8y4zvanr41a3pwfz30n25wqz4ca5pfsr30c35feb4he2pssrxgn6vasbu1g7dfqm10c6xeeb4hw6df", "MV Super-secret message transfer pasteboard type", "dyn.ah62d4rv4gu8zg7puqz3c465fqr3gn7bakf41k55rqf4g86vasbu1g7dfqm10c6xeeb4hw6df", "Super-secret Automator pasteboard type", "dyn.ah62d4rv4gu8yc6durvwwa3xmrvw1gkdusm1044pxqyuha2pxsvw0e55bsmwca7d3sbwu", "Apple files promise pasteboard type", "public.url", "CorePasteboardFlavorType 0x75726C20", "dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwu", "Apple URL pasteboard type", "public.url-name", " CorePasteboardFlavorType 0x75726C6E", "com.apple.pasteboard.promised-file-content-type", "com.apple.pasteboard.promised-file-url", "dyn.ah62d4rv4gu8y6y4usm1044pxqzb085xyqz1hk64uqm10c6xenv61a3k", NSPromiseContentsPboardType)
有没有人有任何建议如何正确地做到这一点以接受多封电子邮件?