2014-09-04 26 views
4

如何從NSItemProvider文件獲取圖像?當我使用-loadItemForTypeIdentifier:kUTTypeImage,我得到一個NSURL,看起來像這樣NSItemProvider以像uiimage或alasset的照片格式

file:///var/mobile/Media/DCIM/103APPLE/IMG_3349.JPG 

我能做些什麼呢?謝謝!

標籤:NSItemProvider NSExtensionItem IOS份額擴展

回答

5

只需使用

[imageItemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage options:nil completionHandler:^(id item, NSError *error) { 
     if (item) 
     { 
      NSData *data = [NSData dataWithContentsOfURL:item]; 
     } 

做任何你想要的數據

+0

哈哈多數民衆贊成更好,謝謝! – Ted 2014-09-05 00:16:56

+0

並非所有共享的圖像都以URL的形式出現。我剛剛遇到了分享Evernote的圖像的問題。在-loadItemForTypeIdentifier的完成處理程序中設置返回類型:options:completionHandler:to NSURL返回nil並引發錯誤。似乎從這個應用程序,特別是返回類型必須是UIImage。 – 2014-11-13 16:34:13

1

我意識到我其實可以做到這一點

[imageItemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage options:nil completionHandler:^(NSData * item, NSError *error) { 
if (item) 
{ 
    //do anything with item 
} 
0

這裏的另一個選項,具體取決於您想要對圖像執行什麼操作:

[itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage 
options:nil completionHandler:^(UIImage *image, NSError *error) { 

        NSData* data = UIImageJPEGRepresentation(image, 1.0f)]; 

       }]; 

所以這個選項提供給你作爲一個圖像,然後,如果你願意,你可以把它變成NSData的或把它作爲一個圖像,也許顯示它,不知道哪種方法將有最好的表現!

0

它不工作的原因是因爲在最後調用completeRequestReturningItems:completionHandler會取消/取消分配ShareViewController,因此永遠不會達到完成處理程序,因爲它已經終止了該類。

嘗試做這樣的事情,而不是你會看到:

[imageItemProvider loadItemForTypeIdentifier:@"public.url" options:nil completionHandler:^(NSURL *url, NSError *error) 
{ 
    NSLog(@"Hit here"); 
    [self.extensionContext completeRequestReturningItems:@[] completionHandler:nil]; 
}]; 
0

最好的辦法是做的是帶負荷數據: [imageItemProvider loadDataRepresentationForTypeIdentifier:(的NSString *)kUTTypeImage completionHandler:^(的NSData *數據,NSError *錯誤){

//你想用什麼數據

}]。

相關問題