好的,我有一个NSOutlineView设置,如果将pdf拖入NSOutlineView,我希望它能捕获PDF。
我的第一个问题,我有以下代码:
[outlineView registerForDraggedTypes:[NSArray arrayWithObjects:NSStringPboardType, NSFilenamesPboardType, nil]];
在我看过的所有Apple Docs和例子中,我也看到像MySupportedType这样的东西是一个注册拖动的对象。这是什么意思?我是否将代码更改为:
[outlineView registerForDraggedTypes:[NSArray arrayWithObjects:@"pdf", NSStringPboardType, NSFilenamesPboardType, nil]];
目前我已将其设置为识别拖放,并且一旦拖动被接受,我甚至可以使其吐出拖动文件的URL,但是,这引出了我的第二个问题。我想保留这些PDF应用程序端的副本。我想,如果我错了,请纠正我,最好的方法是从剪贴板中取出数据,将其保存在一些持久存储中,就是这样。 (因为使用某种复制命令并将文件复制到应用程序控制器。)
话虽如此,我不知道该怎么做。我有代码:
- (BOOL)outlineView:(NSOutlineView *)ov acceptDrop:(id <NSDraggingInfo>)info item:(id)item childIndex:(NSInteger)childIndex
{
NSPasteboard *pboard = [info draggingPasteboard];
NSURL *fileURL;
if ( [[pboard types] containsObject:NSURLPboardType] ) {
fileURL = [NSURL URLFromPasteboard:pboard];
// Perform operation using the file’s URL
}
NSData *data = [pboard dataForType:@"NSPasteboardTypePDF"];
但这实际上从未获得任何数据。就像我之前说的那样,它确实得到了URL,而不是数据。 有没有人对如何实现这一目标有任何建议?非常感谢!
答案 0 :(得分:4)
拖动类型
拖动类型只是定义系统粘贴板类型(如NSFilenamesPboardType)或应用程序自己的内部类型的字符串(如“MyWidgetIdentifierType”,用于通过某个内部ID标识窗口小部件)。
“PDF”的拖动类型不能为您提供任何帮助。你可以把它称为“Bob8374Type”...如果你不给你的应用程序识别类型的能力(或者没有任何东西将任何东西放入该类型的粘贴板中),它完全没用。您正在使用拖动的文件,因此NSFilenamesPboardType是正确的。
除非粘贴板上有NSPasteboardTypePDF数据,否则NSPasteboardTypePDF将无法帮助您。拖动文件时,您将获得NSFilenamesPboardType。如果文件是.pdf或.xyz,则无关紧要;你只是在路上。
复制文件或存储路径
您需要决定是要复制已删除的PDF还是仅存储路径(或更好的文件系统引用)。如果您要复制PDF,则需要确保知道正确的存储位置(如Application Support文件夹等)。
假设您确实想要在某处复制已删除的pdf,则不需要PDF数据。您可以使用NSFileManager将给定路径上的文件复制(或移动)到新位置。如果您有其他存储机制(即,您想将文件的PDF数据吸收到其他数据结构中),您可以直接使用NSData的+dataWithContentsOfURL:options:error:获取PDF数据并根据需要处理其数据