代码之家  ›  专栏  ›  技术社区  ›  robottobor

如何处理Mac OS X 10.5中finder的多个文件拖放?

  •  9
  • robottobor  · 技术社区  · 15 年前

    我需要从finder获取所有拖放到我的应用程序中的文件的URL。

    我有一个运行在10.6上的Cocoa应用程序,它使用新的10.6 nsPasteboard API来处理Pasteboard上的多个项目。我想把这个应用程序改成10.5版。我怎么在10点5分处理这个?

    如果我做如下的事情,我只会得到第一个网址:

        NSArray *pasteTypes = [NSArray arrayWithObjects: NSURLPboardType, nil];
        NSString *bestType = [pboard availableTypeFromArray:pasteTypes]; 
        if (bestType != nil) {
            NSURL *url = [NSURL URLFromPasteboard:pboard];
        }        
    
    4 回复  |  直到 12 年前
        1
  •  6
  •   catsby    15 年前

    这个 IKImageKit programming topics 概述这样做的方法(释义):

       NSData *data = [pasteboard dataForType:NSFilenamesPboardType];
       NSArray *filenames = [NSPropertyListSerialization
            propertyListFromData:data
                mutabilityOption:kCFPropertyListImmutable
                          format:nil
                errorDescription:&errorDescription];
    

    请参见这里: Image Kit Programming Guide: Supporting Drag and Drop

        2
  •  10
  •   Thomas Zoechling    12 年前

    获取多个文件名很容易:(在获取 multiple URLs is not 10.5)

    1. 为注册您的视图 NSFilenamesPboardType
    2. performDragOperation: 执行以下操作以获取文件路径数组:

    NSPasteboard* pboard = [sender draggingPasteboard];
    NSArray* filenames = [pboard propertyListForType:NSFilenamesPboardType];
    
        3
  •  1
  •   macshome    13 年前

    nsurlpboardType只处理一个URL。

    要获取文件列表,您需要从nsFileNamesBoardType创建一个nsArray。

    苹果公司 docs on drag and drop 很好,即使是旧的东西。

        4
  •  0
  •   Peter Hosey    15 年前

    如何在10.5处理[粘贴板上的多个项目]?

    试试 Pasteboard Manager .

    棘手的部分是,您正在处理一个放置,这意味着您正在接收一个已经为您创建的nspasteboard,并且无法在nspasteboard对象和 PasteboardRef 你得向空间站询问 name ,然后将相同的名称传递给 PasteboardCreate 可能不起作用。