NSPasteboard を使用してデータを読み取り、受信したデータでアクションを実行しています。
具体的には、以下のような優先度の高い情報に興味があります。
- ファイルパス
- テキストデータ
- 画像データ (これは画像ファイルをコピーするのではなく、画像の実際の部分をコピーすることです。たとえば、エディターで画像を開いて選択し、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];
問題の説明:
このページの URL をコピーしたところ、「text」と「text2」の両方にペーストボードからの文字列が含まれています。だからここでいいです:)
TextEdit で開いた .cs コード ファイルからいくつかの行をコピーすると、クリップボードに "public.utf8-plain-text" と "NSStringPboardType" があることが示されますが、"text" と "text2" はどちらも nil です。
同じ C#.NET .cs ファイルから、たとえば次のように改行せずに 1 つの単語を選択します。「System.Threading」、クリップボードは、「public.utf8-plain-text」と「NSStringPboardType」があり、「text」と「text2」の両方にコピーされたテキストがあることを示していますが、スペースや行でコピーされたものはありません。「myProject.Core.Helpers」は機能しますが、「namespace myProject.Core.Helpers」は機能しません。
同様に、RTF ファイルからいくつかのテキストをコピーします。クリップボードには、同じ古い "public.utf8-plain-text" および "NSStringPboardType" タイプと一緒に多くの RTF 関連情報があることが示されますが、やはり "text" です。 "text2" と、今回は "rtfText" はすべて nil です。
では、すべての場合に必要なテキストをクリップボードから取得するにはどうすればよいでしょうか? RTF データにはテキストよりも多くのデータを含めることができることは知っていますが、文字列ファイルにテキストを出力することだけに関心があります。
どんな助けでも大歓迎です。
ありがとう!