0

ペーストボードにあるデータのタイプを読み取ろうとしています。ただし、プログラムは画像があることを返しています (おそらく、それが if ステートメントの最初の条件であるため)。私は何を間違っていますか?これは、私が参照しているコードの一部です。ありがとう。

NSArray * imgType = [NSArray arrayWithObject:[NSImage class]];
NSArray * strType = [NSArray arrayWithObject:[NSString class]];

NSArray * pboardImg = [pboard readObjectsForClasses:imgType
                                         options:nil];
NSArray * pboardStr = [pboard readObjectsForClasses:strType
                                         options:nil];

if( pboardImg ){
// Got an image!
}

if( pboardStr ){
   // Got a string!
}
4

2 に答える 2

0

ペーストボードからデータの種類を読み取ろうとしているだけの場合は、どちら-canReadItemWithDataConformingToTypes:かを使用するか-canReadObjectForClasses:options:、これらが使用可能かどうかをテストするために使用することをお勧めします。

オブジェクト自体を読みたい場合は、正しい呼び出しを行っていますが、ペーストボードに複数のアイテムがある場合、オブジェクトを使用する方法で、ペーストボード上の同じアイテムの複数の表現が取得される可能性があります。テキストと画像の両方の表現。

を確認することもでき[pboardImg count] > 0ます。ドキュメントには、そのタイプのオブジェクトを作成できない場合はnilが返されると明記されていますが、長さがゼロの配列では何もできない可能性があり、Objective-Cディスパッチャーは呼び出しを短絡します0をnil返すと、テストも失敗します(必要に応じて)。

于 2012-03-03T21:57:09.253 に答える
0

私はこれに対する解決策を見つけました.gaigeが言ったように、返されたデータには、ユーザーが見ることができるコンテンツだけでなく、他の多くの種類の情報が含まれています.

また、利用可能な他の種類の情報を見つけて使用して実験しました。その一部を次に示します。

*NSStringPboardType;        
*NSFilenamesPboardType;  
*NSTIFFPboardType;      
*NSRTFPboardType;      
...

ただし、私が使用している Xcode バージョンでは、これらの一部が将来のバージョン (xcode 3 を使用している) で削除される可能性があると述べられているため、誰かがこれらを使用する場合は注意してください..

助けてくれてありがとう!

于 2012-03-07T09:34:14.813 に答える