【发布时间】:2014-04-27 17:43:51
【问题描述】:
我有一个广泛使用照片的应用程序,对它们进行了多项操作:
- 调整大小
- 裁剪
- 元数据提取
我编写的大多数方法都在 AlAssets 上运行,因此我想编写我的测试(我正在使用新的 XCTest 框架)也可以在 ALAssets 上运行。
我在项目中包含了一组照片作为测试的输入,我计划在 [XCTest +setUp] 上将每张图片添加到库中,并在 [XCTest +tearDown] 上删除它们。
一切都很顺利 - 虽然,编译 XCTest 是一场噩梦 - 但是对于我拨打的每一个电话:
- (void)writeImageDataToSavedPhotosAlbum:metadata:completionBlock:
完成块永远不会被调用,也不会将图像添加到库中,如果稍后我枚举那里的所有照片,我只会看到库中以前可用的照片。
为了确保完成块运行,我使用信号量控制应用程序流,如下所示:
UIImage *image = [self imageWithName:@"DSC_0002" extension:@"JPG"];
NSData *dataJpeg = UIImageJPEGRepresentation(image, 0.9f);
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
[library writeImageDataToSavedPhotosAlbum:dataJpeg metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
// control will never run this code
NSLog(@"Asset URL %@",[assetURL absoluteString]);
dispatch_semaphore_signal(sem);
}];
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
有什么想法吗?有没有可能在 XCTest 上的库上写?
提前致谢, 泽
【问题讨论】:
标签: ios objective-c alassetslibrary alasset xctest