2010-12-06 74 views
0

我支持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); 

回答

5

要從完整路徑創建文件URL,請不要自行添加file://前綴。只需使用

NSURL* url=[NSURL fileURLWithPath:pathString]; 

請參閱the documentation

從視操作系統的角度來看,

/Users/myname/file.txt 

是在系統中的文件的完整路徑。在允許各種網絡訪問的更高級別的API中,本地文件通過使用file://協議來區分。 這些pboard API早於API中URL的普遍使用,這就是爲什麼它將路徑作爲完整路徑返回,而不是作爲文件URL。

+0

謝謝,那很好用 – evilfred 2010-12-06 03:52:59