iOS:UIPasteboard setImage:iOS6和/或Xcode 4.5失败

问题描述:

更新:在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

这适用于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

我收到一封电子邮件有关此问题的苹果开发者技术支持,我得到这个答复:

感谢您联系苹果开发技术支持。我们的工程师已审核您的请求,并确定这将作为错误报告最好地处理。

请使用Bug Reporter工具http://bugreport.apple.com提交有关此问题的完整的错误报告。

所以这是一个肯定的错误...

+0

呼叫良好;苹果网站上增加了bug 12408800。将回复他们的回复。 – toblerpwn

+0

我也曾经为这个问题开了一个Apple开发者技术支持,然后我提出了我前几天发布的解决方案并将它发送给他们。所以他们已经知道这个问题了,我也创建了一个错误报告。不知道是否因为我回答我自己的问题,我会得到技术支持事件;) – rob1302

只有一个形象,你应该使用:

#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