gpt4 book ai didi

Cocoa Drag and Drop,读回数据

转载 作者:行者123 更新时间:2023-12-03 17:32:50 24 4
gpt4 key购买 nike

好的,我设置了一个 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,但没有获取数据。 有人对如何进行这件事有任何建议吗?非常感谢!

最佳答案

拖动类型

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

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

除非粘贴板上有 NSPasteboardTypePDF 数据,否则 NSPasteboardTypePDF 不会为您提供帮助。当文件被拖动时,你会得到 NSFilenamesPboardType。文件是 .pdf 还是 .xyz 并不重要;你只能得到路径。

复制文件或存储路径

您需要决定是要复制拖放的 PDF 还是仅存储其路径(或者更好的是文件系统引用)。如果您要复制 PDF,则需要确保您了解正确的存储位置(例如“应用程序支持”文件夹等)。

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

关于Cocoa Drag and Drop,读回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2987552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com