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

7

更新:在苹果网站上添加了错误12408800。


我正在将一个或多个UIImage复制到UIPasteboard,一直都很顺利 ... 直到我的手机升级到iOS 6。

  • Xcode 4.5与iOS 5.1- 正常
  • Xcode 4.4与iOS 6.0- 也正常 (根据此帖子)
  • Xcode 4.5与iOS 6.0- 失败

(还测试了通过TestFlight进行分发,无论怎样都失败)

这是我的代码(非常基本等):

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

这是我尝试将内容粘贴到MMS / iMessage窗口时发生的情况(抱歉截图很大,是视网膜显示屏):
..以下是iOS6模拟器中消息示例应用程序失败的示例(请参见两个问号..?):
就像我说的,上面的代码已经运行了很长时间,所以我肯定这是新的问题。
有什么想法吗?在链接的帖子中,作者建议在旧版本的Xcode上重新编译,但那不会导致其他iOS6库停止工作吗?

我确实需要新的iOS功能,但不幸的是,否则我的旋转在iOS 6上完全失效了。所以,目前,我已经完全从我的应用程序中删除了复制/粘贴功能。哎呀。 - toblerpwn
3个回答

13

在我的iOS 6设备上,这对我在Xcode 4.5上运行良好。

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

很好。在5.1和6.0上,当复制一张图片时,它完美地运行。那么,如果要复制多张图片到剪贴板中,如UIPasteboardsetImages:,该怎么办? - toblerpwn
1
使用setImages:似乎仍然无法正常工作。我们可能需要等待苹果公司找出Xcode 4.5实际存在的问题。 - rob1302
完美运作。当我发现我的应用在iOS6上无缘无故地不工作时,迅速解决了一点恐慌!奇怪的是这个功能发生了变化,但我们没有收到任何警告或相关信息。 - Boeckm
在iOS 6.0.1中运行良好!我发送了一个JPEG,所以我将数组更改为加载位置号码1。 - João Nunes
不要使用 [UIPasteboardTypeListImage objectAtIndex:0] - 假设苹果有一天更改了顺序是很危险的。文档没有提供关于顺序的任何信息。 - Tom Andersen
如果苹果更改顺序而没有告诉任何人,您会建议使用什么替代方法? - 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 而点赞,其他人都没有提到。 - Rich Apodaca
你也可以使用@"public.jpeg"代替kUTTTypeJPEG,因为它是一个永远不会改变的公共常量。这样可以避免为了一个常量而链接整个库。 - Tom Andersen
在 iOS8 中,我在将内容粘贴到“笔记”应用程序时遇到了问题,但上面的代码有效。通过下面所分享的代码,可以将内容粘贴到“信息”应用程序中,并且现在两者都可以:UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard]; if (image) { [pasteBoard setImage:image]; } - C0D3

1

我向苹果开发者技术支持发送了一封关于这个问题的电子邮件,收到了以下回复:

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

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

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


好的,已在苹果网站上添加了错误编号12408800。等待他们的回复后再报告。 - toblerpwn
我也向苹果开发者技术支持提出了这个问题,然后我想出了我前几天发布的解决方案并将其发送给了他们。所以他们已经知道这个问题了,而且我还创建了一个错误报告。不知道我是否会因为为他们回答了自己的问题而得到我的技术支持事件 ;) - rob1302

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接