我支持在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);
答案 0 :(得分:5)
要从完整路径创建文件URL,请不要自己添加file://
前缀。只需使用
NSURL* url=[NSURL fileURLWithPath:pathString];
从操作系统的角度来看,
/Users/myname/file.txt
是系统中文件的完整路径。在允许各种网络访问的更高级API中,通过放置file://
协议来区分本地文件。
这些pboard API早于API中流行的URL使用,这就是它将路径作为完整路径而不是文件URL返回的原因。