Проверка того, что конкретное изображение было скопировано на монтажный стол

Я пишу тест для проверки функции, которая копирует изображение на монтажный стол.

Вот тест, как я бы предпочел его написать:

// 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, изображение является полем, допускающим значение NULL.

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

Я предполагаю, что это означает, что они выполняют проверку аргумента во время выполнения, даже если он допускает значение NULL.

Что я пробовал:

  • сравнение объектов по идентификатору не работает, потому что UIImage копируются с помощью generalPastboard.image (каждый раз, когда вы вызываете UIPasteboard.generalPasteboard.image, вы можете использовать другой экземпляр)
  • сравнение по представлению PNG может работать, но кажется корявым.
  • Сравнение по размеру изображения до сих пор было моей ближайшей ставкой, но также кажется окольным путем.

person mkirk    schedule 18.03.2016    source источник
comment
Вы можете попробовать .items = [] для сброса.   -  person jtbandes    schedule 18.03.2016
comment
Спасибо! Если вы опубликуете как ответ, я приму.   -  person mkirk    schedule 18.03.2016


Ответы (1)


Вы можете очистить монтажный стол без необходимости передавать nil, используя свойство items:

UIPasteboard.generalPasteboard.items = @[];

Или в Свифте:

UIPasteboard.generalPasteboard().items = []

Для сравнения UIImages вы можете рассмотреть некоторые другие вопросы:

person jtbandes    schedule 18.03.2016