2012-09-22 29 views
7

更新:在Apple網站上添加了bug 12408800。iOS:UIPasteboard setImage:iOS6和/或Xcode 4.5失敗


我複製某一個或多個的UIImage到UIPasteboard,並一直工作勢如破竹..直到我的手機升級到iOS 6

  • 的Xcode 4.5與iOS 5.1 - OK
  • 的Xcode 4.4與iOS 6.0 - 另外行according to this post
  • 的Xcode 4.5與iOS 6.0 - FAIL

(也測試通過TestFlight分發,爲它的價值 - 仍然失敗)

這裏是我的代碼(超級基本等):

// add image to clipboard 
UIImage *image = [[UIImage imageNamed:@"testimage"]; 
[[UIPasteboard generalPasteboard] setPersistent:YES]; 
[[UIPasteboard generalPasteboard] setImage:image]; 

這裏是當我發生了什麼嘗試在MMS/iMessage窗口中粘貼(抱歉巨大的屏幕截圖;視網膜顯示..):

screenshot_of_failure

..和在所述iOS6的模擬器的消息示例應用程序的故障的一個例子(見兩個問號..):

another screenshot!

就像我說的,上面的代碼已經工作了很長時間,所以我確信這是一個新的東西。

有什麼想法?在鏈接的文章中,作者建議在舊版本的Xcode上重新編譯 - 但不會導致其他iOS6庫停止工作?

+0

我確實需要新的iOS功能,不幸的是..否則我的旋轉是完全結合在iOS 6上。所以,現在,我完全從我的應用程序中刪除了複製/粘貼。 OY合租。 – toblerpwn

回答

13

這適用於iOS 6設備的Xcode 4.5。

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];   
NSData *imgData = UIImagePNGRepresentation(@"image"); 
[pasteboard setData:imgData forPasteboardType:[UIPasteboardTypeListImage objectAtIndex:0]]; 
+0

好。在5.1和6.0上完美工作 - 複製一張圖像時。如何將多個圖像複製到剪貼板,如'UIPasteboard'的'setImages:'? – toblerpwn

+1

使用setImages:似乎仍然無法正常工作。猜猜我們必須等待Apple找出Xcode 4.5中實際存在的問題。 – rob1302

+0

完美的作品。當我注意到我的應用程序無法在iOS6中正常工作時,快速解決了一點恐慌!奇怪的是,這個功能改變了,但我們沒有得到任何警告或任何有關它。 – Boeckm

1

我收到一封電子郵件有關此問題的蘋果開發者技術支持,我得到這個答覆:

感謝您聯繫蘋果開發技術支持。我們的工程師已審覈您的請求,並確定這將作爲錯誤報告最好地處理。

請使用Bug Reporter工具http://bugreport.apple.com提交有關此問題的完整的錯誤報告。

所以這是一個肯定的錯誤...

+0

呼叫良好;蘋果網站上增加了bug 12408800。將回復他們的回覆。 – toblerpwn

+0

我也曾經爲這個問題開了一個Apple開發者技術支持,然後我提出了我前幾天發佈的解決方案並將它發送給他們。所以他們已經知道這個問題了,我也創建了一個錯誤報告。不知道是否因爲我回答我自己的問題,我會得到技術支持事件;) – rob1302

7

只有一個形象,你應該使用:

#import <MobileCoreServices/UTCoreTypes.h> 

對於JPEG:

NSData *jpegData = UIImageJPEGRepresentation(image, 1.0); 
[[UIPasteboard generalPasteboard] setData:jpegData forPasteboardType:(id)kUTTypeJPEG]; 

或爲PNG:

NSData *pngData = UIImagePNGRepresentation(image); 
[[UIPasteboard generalPasteboard] setData:pngData forPasteboardType:(id)kUTTypePNG]; 

,直接避免UIPasteboardTypeListImage索引。

+1

+1添加#import,其他人忽略提及。 –

+0

你也可以使用@「public.jpeg」而不是kUTTTypeJPEG,因爲它的公共常量永遠不會改變。這樣可以避免將一個常量鏈接到整個庫中。 –

+0

在iOS8中我在粘貼到Notes應用程序時遇到了問題,但上面的代碼工作正常。通過我在下面分享的代碼,粘貼在Messages應用程序正在工作,但現在都可以工作:UIPasteboard * pasteBoard = [UIPasteboard generalPasteboard]; \t if(image){ \t \t [pasteBoard setImage:image]; \t} – c0d3Junk13