1

NSPasteboard を使用してデータを読み取り、受信したデータでアクションを実行しています。

具体的には、以下のような優先度の高い情報に興味があります。

  1. ファイルパス
  2. テキストデータ
  3. 画像データ (これは画像ファイルをコピーするのではなく、画像の実際の部分をコピーすることです。たとえば、エディターで画像を開いて選択し、command + v を押す場合)

これは私がコードに持っているものです

_pasteBoard = [NSPasteboard generalPasteboard];
NSArray *types = [_pasteBoard types];

NSArray *files = [_pasteBoard propertyListForType: NSFilenamesPboardType];

NSString *text = [_pasteBoard propertyListForType: NSStringPboardType];

NSString *text2 = [_pasteBoard propertyListForType: NSPasteboardTypeString];

NSString *rtfText = [_pasteBoard propertyListForType: NSRTFPboardType];

NSData *imageData = [_pasteBoard dataForType: NSTIFFPboardType];

現在、必要なデータを取得できるかどうかをテストしているだけです。そのため、Destkop でいくつかのファイルを選択すると、選択したファイルの URL がファイルに含まれます。それでうまくいきます。

同様に、画像の一部を選択してクリップボードにコピーすると、imageData にデータが含まれており、それを別のファイルに書き込むと、選択した部分だけがコピーされたことがわかるので、それも問題ありません。また、画像「ファイル」をクリップボードにコピーすると、imageDataもnilにならないことを理解していますが、最優先事項はファイルURLにあり、必要なことを行う場合であるため、問題ありません。

私が遭遇した問題は、ペーストボードからのテキストの読み取りに関連する行にあります。

NSString *text = [_pasteBoard propertyListForType: NSStringPboardType];

NSString *text2 = [_pasteBoard propertyListForType: NSPasteboardTypeString];

NSString *rtfText = [_pasteBoard propertyListForType: NSRTFPboardType];

問題の説明:

  1. このページの URL をコピーしたところ、「text」と「text2」の両方にペーストボードからの文字列が含まれています。だからここでいいです:)

  2. TextEdit で開いた .cs コード ファイルからいくつかの行をコピーすると、クリップボードに "public.utf8-plain-text" と "NSStringPboardType" があることが示されますが、"text" と "text2" はどちらも nil です。

  3. 同じ C#.NET .cs ファイルから、たとえば次のように改行せずに 1 つの単語を選択します。「System.Threading」、クリップボードは、「public.utf8-plain-text」と「NSStringPboardType」があり、「text」と「text2」の両方にコピーされたテキストがあることを示していますが、スペースや行でコピーされたものはありません。「myProject.Core.Helpers」は機能しますが、「namespace myProject.Core.Helpers」は機能しません。

  4. 同様に、RTF ファイルからいくつかのテキストをコピーします。クリップボードには、同じ古い "public.utf8-plain-text" および "NSStringPboardType" タイプと一緒に多くの RTF 関連情報があることが示されますが、やはり "text" です。 "text2" と、今回は "rtfText" はすべて nil です。

では、すべての場合に必要なテキストをクリップボードから取得するにはどうすればよいでしょうか? RTF データにはテキストよりも多くのデータを含めることができることは知っていますが、文字列ファイルにテキストを出力することだけに関心があります。

どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1