我需要从Finder中将所有文件的URL拖放到我的应用程序中。
我有一个运行在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];
}
答案 0 :(得分:10)
获取多个文件名很简单:(在获取multiple URLs is not时使用10.5)
NSFilenamesPboardType
performDragOperation:
中执行以下操作以获取文件路径数组:NSPasteboard* pboard = [sender draggingPasteboard];
NSArray* filenames = [pboard propertyListForType:NSFilenamesPboardType];
答案 1 :(得分:6)
IKImageKit programming topics
概述了这样做的方式(释义):
NSData *data = [pasteboard dataForType:NSFilenamesPboardType];
NSArray *filenames = [NSPropertyListSerialization
propertyListFromData:data
mutabilityOption:kCFPropertyListImmutable
format:nil
errorDescription:&errorDescription];
答案 2 :(得分:1)
NSURLPboardType只处理一个URL。
获取从NSFilenamesPboardType创建NSArray所需的文件列表。
Apple的docs on drag and drop非常好,即使它是旧的东西。
答案 3 :(得分:0)
如何在10.5上处理[粘贴板上的多个项目]?
棘手的部分是您正在处理丢弃,这意味着您正在接收已经为您创建的NSPasteboard,并且无法在NSPasteboard对象和PasteboardRef
之间进行转换。您必须向NSPasteboard询问其name
,然后将相同的名称传递给PasteboardCreate
,这可能无效。
答案 4 :(得分:0)