2010-12-06 10 views
0

IKImageBrowserViewでドラッグアンドドロップ操作をサポートしています。ドラッグ&ドロップ先の代理人では、NSFilenamesPboardTypeドロップを受け入れます。変わった部分は、NSOpenPanelを使うときに得られるように、 "file:// localhost/..."の代わりに "/ Users/..."で始まるファイルパス文字列がすべて始まるということです。これらを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

関連する問題