9

Finderからアプリケーションにドラッグ/ドロップされたすべてのファイルのURLを取得する必要があります。

私は10.6で実行されているCocoaアプリを持っています。これは、ペーストボード上の複数のアイテムを処理する新しい10.6NSPasteboardAPIを使用してこれを行います。このアプリを10.5にバックポートしようとしています。10.5でこれを処理するにはどうすればよいですか?

以下のようなことをすると、最初のURLしか取得できません。

    NSArray *pasteTypes = [NSArray arrayWithObjects: NSURLPboardType, nil];
    NSString *bestType = [pboard availableTypeFromArray:pasteTypes]; 
    if (bestType != nil) {
        NSURL *url = [NSURL URLFromPasteboard:pboard];
    }        
4

5 に答える 5

10

複数のファイル名を取得するのは簡単です:(複数のURLを取得するのは10.5ではありませんが)

  1. ビューを登録する NSFilenamesPboardType
  2. 次の手順performDragOperation:を実行して、ファイルパスの配列を取得します。

NSPasteboard* pboard = [sender draggingPasteboard];
NSArray* filenames = [pboard propertyListForType:NSFilenamesPboardType];
于 2010-01-04T09:03:45.453 に答える
6

IKImageKit programming topicsこのようにこれを行う方法の概要(言い換え):

   NSData *data = [pasteboard dataForType:NSFilenamesPboardType];
   NSArray *filenames = [NSPropertyListSerialization
        propertyListFromData:data
            mutabilityOption:kCFPropertyListImmutable
                      format:nil
            errorDescription:&errorDescription];

ここを参照してください:イメージキットプログラミングガイド:ドラッグアンドドロップのサポート

于 2010-01-04T14:00:10.640 に答える
1

NSURLPboardTypeは1つのURLのみを処理します。

ファイルのリストを取得するには、NSFilenamesPboardTypeからNSArrayを作成する必要があります。

ドラッグアンドドロップに関するAppleのドキュメントは、古いものであってもかなり良いものです。

于 2011-03-16T22:26:53.477 に答える
0

10.5で[厚紙上の複数のアイテム]を処理するにはどうすればよいですか?

PasteboardManagerを試してください。

トリッキーな部分は、ドロップを処理していることです。つまり、すでに作成されているNSPasteboardを受け取っており、NSPasteboardオブジェクトとPasteboardRefsの間で変換する方法はありません。NSPasteboardにその名前を尋ねてからname、同じ名前をに渡す必要がありますが、それPasteboardCreateは機能しない可能性があります。

于 2010-01-04T11:30:50.090 に答える
0

迅速な5.1のための私の2セント(NSViewにドロップ...カスタマイズする)

を参照してください:

Swift:ウィンドウ内でドラッグアンドドロップしてファイルを開く

于 2020-01-31T08:09:48.103 に答える