2014-02-23 50 views
1

我嘗試三種類型的對象之間,以確定:如何檢測紙板項目類型

  1. ,如果它是一個文件
  2. 的URL。如果它是一個目錄
  3. ,如果它的URL是一個簡單的字符串

到目前爲止,我只是這個代碼,這是行不通的!

NSArray * classes = nil; 
      classes = [[NSArray alloc] initWithObjects:[NSURL class], 
         [NSAttributedString class],[NSString class], nil]; 

      NSDictionary *options = [NSDictionary dictionary]; 
      NSArray * copiedItems = nil; 
      copiedItems = [pb readObjectsForClasses:classes options:options]; 

現在我嘗試採取數組copieditems的第一個對象,並嘗試調用「類型」屬性,我得到一個崩潰!

回答

2

檢查herehere
你會需要使用這些紙板類型,而不是你使用的手機。

NSString *NSStringPboardType; 
NSString *NSFilenamesPboardType; 
NSString *NSPostScriptPboardType; 
NSString *NSTIFFPboardType; 
NSString *NSRTFPboardType; 
NSString *NSTabularTextPboardType; 
NSString *NSFontPboardType; 
NSString *NSRulerPboardType; 
NSString *NSFileContentsPboardType; 
NSString *NSColorPboardType; 
NSString *NSRTFDPboardType; 
NSString *NSHTMLPboardType; 
NSString *NSPICTPboardType; 
NSString *NSURLPboardType; 
NSString *NSPDFPboardType; 
NSString *NSVCardPboardType; 
NSString *NSFilesPromisePboardType; 
NSString *NSMultipleTextSelectionPboardType; 

有一個URL的粘貼板類型。爲了區分文件和文件夾,您需要使用粘貼板數據實例化NSURL對象,並通過查詢其屬性來查找它是否爲目錄。

編輯: 您還需要考慮粘貼板數據是否由您自己的應用程序或其他應用程序放在那裏。如果它被其他應用程序放置,我不確定具有該類的粘貼板類型是否可用。

我用這樣的事情在我的項目之一:

supportedTypes = // array with supported types, maybe from the list 
NSString *type = [pasteboard availableTypeFromArray:supportedTypes]; 
NSData *data = [pasteboard dataForType:type]; 
+0

謝謝你的回答,但我一直在清理這兩頁這幾天......還沒有運氣呢!你從哪裏得到這份清單? –

+0

列表來自我的答案中的鏈接(第一行,第二個鏈接)。我編輯了答案一點,如果它有幫助 – Merlevede

0

types是用來告訴你什麼是可以從紙板上NSPasteboard的方法。所以,你不應該把它從你從紙板上拿回來的物品上調用它。

如果您要請求多個類類型,請遍歷響應並檢查每個項目的類類型,然後決定如何與其交互。

或者,決定哪種類型的數據最有用,並向粘貼板發出單獨的類型請求。如果你得到一個結果,使用它,繼續,如果沒有,嘗試下一個最有用的類類型。看看使用canReadObjectForClasses:options:使這更容易。

+0

好吧,我剛剛檢查。 NSPasteboardItem類有一個方法可用...我將嘗試您提出的其他想法! –

+0

返回的項目符合'NSPasteboardReading'協議,但它沒有'types'方法。 – Wain