【问题标题】:Cocoa Drag and Drop, reading back the dataCocoa 拖放,读回数据
【发布时间】:2010-06-07 06:48:03
【问题描述】:

好的,我设置了 NSOutlineView,如果将 pdf 拖入 NSOutlineView,我希望它能够捕获 PDF。

我的第一个问题,我有以下代码:

[outlineView registerForDraggedTypes:[NSArray arrayWithObjects:NSStringPboardType, NSFilenamesPboardType, nil]];

在我看到的所有苹果文档和示例中,我还看到像 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,而不是数据。 有没有人对如何进行这件事有任何建议?非常感谢!

【问题讨论】:

    标签: cocoa drag-and-drop


    【解决方案1】:

    拖动类型

    拖动的类型只是定义系统粘贴板类型(如 NSFilenamesPboardType)或您的应用程序自己的内部类型(如“MyWidgetIdentifierType”以通过某些内部 ID 标识小部件)的字符串。

    “PDF”的拖动类型不会为您带来任何好处。您不妨将其称为“Bob8374Type”......如果您不让您的应用程序能够识别该类型(或者没有任何东西将任何内容放入该类型的粘贴板),那么它完全没用。您正在处理拖动的文件,因此 NSFilenamesPboardType 是正确的。

    除非粘贴板上有 NSPasteboardTypePDF 数据,否则 NSPasteboardTypePDF 不会帮助您。当文件被拖动时,你会得到 NSFilenamesPboardType。文件是 .pdf 还是 .xyz 都没关系;你只会得到路径。

    复制文件或存储路径

    您需要决定是要复制删除的 PDF 还是只存储它的路径(或者更好的是,文件系统引用)。如果您要复制 PDF,您需要确保知道正确的存储位置(如应用程序支持文件夹等)。

    假设您确实想将删除的 pdf 复制到某处,则不需要 PDF 数据。您可以使用 NSFileManager 将给定路径中的文件复制(或移动)到新位置。如果你有一些其他的存储机制(例如,你想把文件的 PDF 数据吸进一些其他的数据结构中),你可以直接使用 NSData 的+dataWithContentsOfURL:options:error: 获取 PDF 数据,然后随心所欲地处理它的数据。

    【讨论】:

    • 真的很有帮助。感谢您清除它。我真的很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多