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)
要从完整路径创建文件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返回的原因.
| 归档时间: |
|
| 查看次数: |
1044 次 |
| 最近记录: |