如何在Mac OS X 10.5中从Finder处理多个文件拖放操作?
问题描述:
我需要从Finder中将所有文件的URL拖放到我的应用程序中。如何在Mac OS X 10.5中从Finder处理多个文件拖放操作?
我有一个在10.6上运行的Cocoa应用程序,它使用新的10.6 NSPasteboard API处理粘贴板上的多个项目。我试图将这个应用程序回溯到10.5。 10.5如何处理这个问题?
如果我这样做下面,我只得到了第一个网址:
NSArray *pasteTypes = [NSArray arrayWithObjects: NSURLPboardType, nil];
NSString *bestType = [pboard availableTypeFromArray:pasteTypes];
if (bestType != nil) {
NSURL *url = [NSURL URLFromPasteboard:pboard];
}
答
的IKImageKit programming topics
轮廓的方式来做到这一点,像这样(转述):
NSData *data = [pasteboard dataForType:NSFilenamesPboardType];
NSArray *filenames = [NSPropertyListSerialization
propertyListFromData:data
mutabilityOption:kCFPropertyListImmutable
format:nil
errorDescription:&errorDescription];
答
获得多个文件名很简单:(尽管取得multiple URLs is not 10.5)
- 注册您的视图
NSFilenamesPboardType
- 在
performDragOperation:
执行以下操作获取文件路径数组:
NSPasteboard* pboard = [sender draggingPasteboard];
NSArray* filenames = [pboard propertyListForType:NSFilenamesPboardType];
答
如何处理[在纸板多个项目]的10.5?
棘手的部分是你正在处理一个drop,这意味着你正在接收一个已经为你创建的NSPasteboard,并且没有办法在NSPasteboard对象和PasteboardRef
之间转换。您必须向NSPasteboard询问其name
,然后将相同的名称传递给PasteboardCreate
,这可能不起作用。
答
的NSURLPboardType只处理一个URL。
要获取需要从NSFilenamesPboardType创建NSArray的文件列表。
苹果的docs on drag and drop是相当不错的,即使它是旧的东西。
返回的NSArray不是NSURL *。这是NSString *。 – 2012-09-10 15:07:15
感谢您指出这一点。 (我将数组从'urls'重命名为'filenames'以清楚表明内容不是NSURL类型*) – 2012-09-10 15:27:55