我如何知道资产库中存在 ALAsset 的 NSURL?
Posted
技术标签:
【中文标题】我如何知道资产库中存在 ALAsset 的 NSURL?【英文标题】:How do I know an NSURL of ALAsset in assets library exists? 【发布时间】:2013-09-11 09:35:41 【问题描述】:如果我在我的数据库中的照片库 (ALAsset) 中保留了一个照片图像的 url 几天,我如何通过它的 NSURL 知道这张照片仍然存在于照片库中?
我试过了,但没用:
// Have already obtained the asset object from ALAssetsLibrary
NSURL *assetURL = [[(ALAsset*)asset defaultRepresentation] url];
BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath: [assetURL absoluteString]];
NSLog(@"exists: %d (%@)", exists, [assetURL absoluteString]);
>> exists: 0 (assets-library://asset/asset.PNG?id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&ext=PNG)
【问题讨论】:
NSURL *myURL = [NSURL URLWithString:@"url 在这里"] NSString *path = [myURL absoluteString]; 【参考方案1】:根据您的要求试试这个。检查一下
dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(group);
__block BOOL flag=YES;
ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init];
[assetslibrary assetForURL:path resultBlock:^(ALAsset *asset)
if (asset==nil)
flag=NO;
else
flag=YES;
dispatch_group_leave(group);
failureBlock:^(NSError *error)
NSLog(@"operation was not successfull!");
dispatch_group_leave(group);
];
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
dispatch_release(group);
【讨论】:
我做了这个实现,但是卡在dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
这一行。当 ALAssetsLibrary 的另一个对象忙时,可能会调用此方法。我认为它可能需要另一个线程或调度队列来处理它。对吗?
我找到了an answer using GCD semaphore,它解决了我的问题。
很好的问题和努力。以上是关于我如何知道资产库中存在 ALAsset 的 NSURL?的主要内容,如果未能解决你的问题,请参考以下文章
如何获取共享照片流 ALAsset 的 ALAssetRepresentation?