测试特定图像是不是已复制到粘贴板

Posted

技术标签:

【中文标题】测试特定图像是不是已复制到粘贴板【英文标题】:Testing that a particular image was copied to pasteboard测试特定图像是否已复制到粘贴板 【发布时间】:2016-03-18 18:37:17 【问题描述】:

我正在编写一个测试来验证将图像复制到粘贴板的功能。

这是测试,我更愿意写它:

// reset the paste board
UIPasteboard.generalPasteboard.image = nil; //<-- this explodes
XCTAssertNil(UIPasteboard.generalPasteboard.image);

// Grab some random existing image
UIImage *image = [UIImage imageNamed:@"some-image"];
MJKMyClass *myInstance = [[myInstance alloc] initWithImage:image];
[myInstance doSomethingThatCopiesImageToPasteboard]

XCTAssertNotNil(UIPasteboard.generalPasteboard.image);

这失败了:

failed: caught "NSInvalidArgumentException", "-[UIPasteboard setImage:]: Argument is not an object of type UIImage [(null)]"

这令人惊讶,因为根据 UIPasteboard 标头,图像是一个可为空的字段。

@interface UIPasteboard(UIPasteboardDataExtensions)
<...>    
@property(nullable,nonatomic,copy) UIImage *image __TVOS_PROHIBITED;
<...>
@end

我认为这意味着他们正在对参数进行运行时检查,即使它可以为空。

我尝试过的事情:

按 id 比较对象不起作用,因为 UIImage 是由 generalPastboard.image 复制的(每次调用 UIPasteboard.generalPasteboard.image 时,您都可以使用不同的实例) 通过 PNG 表示进行比较可能有效,但看起来很粗糙。 到目前为止,按图像大小进行比较是我最接近的选择,但也似乎是迂回的。

【问题讨论】:

您可以尝试.items = [] 进行重置。 谢谢!如果您作为答案发布,我会接受。 【参考方案1】:

您可以使用items 属性清除粘贴板,而无需传递nil

UIPasteboard.generalPasteboard.items = @[];

或者在 Swift 中:

UIPasteboard.generalPasteboard().items = []

为了比较 UIImages,你可能想看看其他一些问题:

How to compare two UIImage objects https://***.com/search?q=uiimage+compare

【讨论】:

以上是关于测试特定图像是不是已复制到粘贴板的主要内容,如果未能解决你的问题,请参考以下文章

jquery 复制到粘贴板

clipboard.js-复制文本到粘贴板

js实现复制到粘贴板,兼容各浏览器

在js里怎么复制一个变量到粘贴板

UIActivity 类型 复制粘贴板 如何附加图像和文本

实现复制文本到粘贴板