开发者

How do I handle multiple file drag/drop from Finder in Mac OS X 10.5?

I need to get the URLs of all files dragged/dropped into my application from Finder.

I have a Cocoa app running on 10.6 which does this by using the new 10.6 NSPasteboard APIs which handle multiple items on the pasteboard. I'm trying to backport this app to 10.5. How do I handle this on 10.5?

If I do something like below, I only get the first URL:

    NSArray *pasteTypes = [NSArray a开发者_高级运维rrayWithObjects: NSURLPboardType, nil];
    NSString *bestType = [pboard availableTypeFromArray:pasteTypes]; 
    if (bestType != nil) {
        NSURL *url = [NSURL URLFromPasteboard:pboard];
    }        


Getting multiple filenames is easy: (While getting multiple URLs is not with 10.5)

  1. Register your view for NSFilenamesPboardType
  2. In performDragOperation: do the following to get an array of file paths:

NSPasteboard* pboard = [sender draggingPasteboard];
NSArray* filenames = [pboard propertyListForType:NSFilenamesPboardType];


The IKImageKit programming topics outline a way to do this like so (paraphrased):

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

See here: Image Kit Programming Guide: Supporting Drag and Drop


The NSURLPboardType just handles one URL.

To get a list of files you need to create a NSArray from a NSFilenamesPboardType.

Apple's docs on drag and drop are pretty good, even if it's older stuff.


How do I handle [multiple items on a pasteboard] on 10.5?

Try the Pasteboard Manager.

The tricky part is that you're handling a drop, which means you're receiving an NSPasteboard already created for you, and there's no way to convert between NSPasteboard objects and PasteboardRefs. You'll have to ask the NSPasteboard for its name, then pass the same name to PasteboardCreate, and that may not work.


my two cents for swift 5.1 (drop in NSView... to be customized)

see at:

Swift: Opening a file by drag-and-drop in window

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜