拥有资产路径,你可以使用此功能来检查是否存在图像:
-(BOOL) imageExistAtPath:(NSString *)assetsPath
{
__block BOOL imageExist = NO;
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library assetForURL:[NSURL URLWithString:assetsPath] resultBlock:^(ALAsset *asset) {
if (asset) {
imageExist = YES;
}
} failureBlock:^(NSError *error) {
NSLog(@"Error %@", error);
}];
return imageExist;
}
请记住,检查是否存在图像是检查asynchronyus。 如果你想等到新线程结束自己的生命通话功能“imageExistAtPath”在主线程:
dispatch_async(dispatch_get_main_queue(), ^{
[self imageExistAtPath:assetPath];
});
或者你可以使用信号量,但是这是不是很好的解决方案:
-(BOOL) imageExistAtPath:(NSString *)assetsPath
{
__block BOOL imageExist = YES;
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_async(queue, ^{
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library assetForURL:[NSURL URLWithString:assetsPath] resultBlock:^(ALAsset *asset) {
if (asset) {
dispatch_semaphore_signal(semaphore);
} else {
imageExist = NO;
dispatch_semaphore_signal(semaphore);
}
} failureBlock:^(NSError *error) {
NSLog(@"Error %@", error);
}];
});
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
return imageExist;
}
好吧,但我怎么回是或否?对不起,不熟悉块... – Mathieu
你能告诉我你想做什么吗?这些块是异步调用的,所以不应该返回一个值,而应该将需要资源的代码放在方法中,并在块中调用此方法,或者直接将代码放入块中。 – Johnmph
我想循环在我的数组assetUrl来检查资产是否仍然存在,如果不是我想从列表中删除它并删除缓存文件 – Mathieu