Проверка того, что конкретное изображение было скопировано в картон
Я пишу тест для проверки функции, которая копирует изображение в монтажный картон.
Вот тест, как я бы предпочел написать:
// 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
Я предполагаю, что это означает, что они выполняют проверку аргумента во время выполнения, даже если он обнуляем.
Вещи, которые я пробовал:
- Сравнение объектов по идентификатору не работает, потому что UIImage копируются generalPastboard.image (каждый раз, когда вы вызываете UIPasteboard.generalPasteboard.image, вы можете использовать другой экземпляр)
- Сравнение по представлению PNG может работать, но кажется корявым.
- Сравнение по размеру изображения было моей самой близкой ставкой, но также кажется окольным.
1 ответ
Решение
Вы можете очистить картон без необходимости проходить nil
используя items
имущество:
UIPasteboard.generalPasteboard.items = @[];
Или в Свифте:
UIPasteboard.generalPasteboard().items = []
Для сравнения UIImages вы можете посмотреть на некоторые другие вопросы: