2012-03-01 52 views
0

我正在嘗試讀取在粘貼板中找到的數據的類型。但是,該程序返回,我有一個圖像(可能是因爲這是如果stattment中的第一個條件)。我究竟做錯了什麼?這是我所指代碼的一部分。謝謝。NSPasteboard未返回正確的數據類型

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! 
} 
+0

數組中有多少個條目? – 2012-03-01 11:41:13

+0

是不是因爲pboardImg不爲零 – 2012-03-01 12:24:47

回答

0

如果你只是想讀從剪貼板中的數據的類型,你可能要爲使用-canReadItemWithDataConformingToTypes:-canReadObjectForClasses:options:爲了只是測試,如果這些都可用。

如果您想自己讀取對象,則可以進行正確的調用,但是如果有多個項目,則使用它們的方式可能會在粘貼板上檢索同一項目的多個表示在文本和圖像表示的粘貼板上。您可能也想檢查[pboardImg count] > 0。儘管文檔中明確指出,如果無法創建任何類型的對象,將返回nil,但無論如何您都不可能對零長度數組做任何事情,Objective-C調度程序將會使呼叫短路到nil返回0,這也將失敗測試(如你所願)。

+0

我已經找到了解決方案,正如gaige所說,返回的數據不僅包含用戶可以看到的內容,還包含許多其他類型的信息。 – Kevin 2012-03-07 09:31:07

0

我已經找到了解決方案,正如gaige所說,返回的數據不僅包含用戶可以看到的內容,還包含許多其他類型的信息。

我還發現並利用可用的其他類型的信息,其中一些如下實驗:

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

不過,我使用的是其中的一些可能會在未來的版本中被刪除的狀態(的Xcode版本我使用xcode 3)所以如果有人使用這些要小心..

感謝您的幫助!