Я пишу тест для проверки функции, которая копирует изображение на монтажный стол.
Вот тест, как я бы предпочел его написать:
// 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 может работать, но кажется корявым.
- Сравнение по размеру изображения до сих пор было моей ближайшей ставкой, но также кажется окольным путем.
.items = []
для сброса. - person jtbandes   schedule 18.03.2016