1

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 にドラッグすると、ファイルが追加されます。

4

1 に答える 1

2

writeObjects: が唯一の方法ではありません。以下も使用できます。

また、NSURL Additions (および)NSURLを使用する機会もあります。+URLFromPasteboard:-writeToPasteboard:

于 2011-06-15T12:10:16.440 に答える