10.6 の新しいペーストボード API は、UTI に慣れるとうまく機能するように見えますが、クラックできない状況に遭遇しました: ファイルのドラッグと組み合わせて複数のデータ型を宣言しているとしたら?
新しいペーストボードが機能する方法を確認してください。setString、setData、setPropertyList、または writeObjects を使用してデータを配置します。最初の 3 つは、受信者が必要な表現を選択できるように、事前に UTI を指定する必要があります。
最後の writeObjects には、便利なクラス NSPasteboardItem などの NSPasteboardWriting 準拠オブジェクトの配列が必要です。
問題は、Finder がペーストボードに追加された URL をリテラル URL として解釈するため、ファイルをドラッグするのではなく、ファイルへの URL を作成することです。
URL の NSPasteboardItem を作成する (私が見つけた) 方法はありません。それはこれを残します(ヘッダーから):
APPKIT_EXTERN NSString *NSFilenamesPboardType; //Deprecated
// Use -writeObjects: to write file URLs to the pasteboard
ただし、URL と NSPasteboard アイテムを混在させると、結果は機能しません。
NSPasteboardItem *noteItem = [[[NSPasteboardItem alloc] init] autorelease];
[noteItem setString:theString forType:NSPasteboardTypeString];
//Here is the problem: you can only have one or the other, not both.
[pasteboard writeObjects:[NSArray arrayWithObjects:noteItem, nil]]; //A
[pasteboard writeObjects:[NSArray arrayWithObject:fileURL]]; //B
// A or B will work but not both
[pasteboard writeObjects:[NSArray arrayWithObjects:
fileURL, noteItem, nil]]; //Will not work
誰かがこれらの両方を一緒に達成する何かを書くことができれば、それは素晴らしい例だと思います.
テストは次のとおりです。
ドラッグして TextEdit にテキストを挿入する必要があります
Finder にドラッグすると、ファイルが追加されます。