拖放时可以从粘贴板获得完整路径吗?

evi*_*red 0 cocoa drag-and-drop objective-c

我支持在IKImageBrowserView上进行拖放操作.在我的拖放目标委托中,我接受NSFilenamesPboardType丢弃.奇怪的是,我得到的文件路径字符串都以"/ Users/..."而不是"file:// localhost/..."开头,就像我在使用NSOpenPanel时得到的那样.当我将这些转换为NSURL以供IKImageBrowserView用于显示图像时,它会混淆,因为它只能理解以"file:// localhost/..."开头的完整路径.我可以破解前缀,正如我在下面的代码片段中所做的那样,但我想知道是否有一种编程方式来获取完整路径?

if ([[pasteboard types] containsObject:NSFilenamesPboardType])
{
    NSData* data = [pasteboard dataForType:NSFilenamesPboardType];
    if (data)
    {
        NSString* errorDescription;
        NSArray* filenames = [NSPropertyListSerialization
            propertyListFromData:data
            mutabilityOption:kCFPropertyListImmutable
            format:nil
            errorDescription:&errorDescription];

        for (id filename in filenames)
        {   
            NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"file://localhost%@", filename]];

            NSLog(@"Adding URL: %@", url);
Run Code Online (Sandbox Code Playgroud)

Yuj*_*uji 5

要从完整路径创建文件URL,请不要file://自己添加前缀.只是用

    NSURL* url=[NSURL fileURLWithPath:pathString];
Run Code Online (Sandbox Code Playgroud)

请参阅文档.

从操作系统的角度来看,

   /Users/myname/file.txt
Run Code Online (Sandbox Code Playgroud)

是系统中文件的完整路径.在允许各种网络访问的更高级API中,通过放置file://协议来区分本地文件.这些pboard API早于API中流行的URL使用,这就是它将路径作为完整路径而不是文件URL返回的原因.