替换 ALAssertLibrary 以获取文件名
Posted
技术标签:
【中文标题】替换 ALAssertLibrary 以获取文件名【英文标题】:Replacing ALAssertLibrary to get the filename 【发布时间】:2016-05-24 06:13:13 【问题描述】:我正在使用以下代码访问我要上传的图像的文件名。我需要文件名以及文件路径和大小。
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *imageAsset)
ALAssetRepresentation *imageRep = [imageAsset defaultRepresentation];
NSLog(@"[imageRep filename] : %@", [imageRep filename]);
[_imageNameArray addObject:[imageRep filename]];
;
[_uploadTbleView reloadData];
ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init];
[assetslibrary assetForURL:refURL resultBlock:resultblock failureBlock:nil];
我面临的问题是,
-
Xcode 会抛出一条警告消息,指出不推荐使用 ALAssetsLibraryAssetForURLResultBlock。如何替换上面的代码来获取文件名?
我尝试使用 PHAsset,但每次选择文件时,所有图像文件的文件名都相同,称为
asset.jpg
。
【问题讨论】:
【参考方案1】:你可以试试这个:
PHAsset *asset = nil;
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions];
if (fetchResult != nil && fetchResult.count > 0)
// get last photo from Photos
asset = [fetchResult lastObject];
if (asset)
// get photo info from this asset
PHImageRequestOptions * imageRequestOptions = [[PHImageRequestOptions alloc] init];
imageRequestOptions.synchronous = YES;
[[PHImageManager defaultManager]
requestImageDataForAsset:asset
options:imageRequestOptions
resultHandler:^(NSData *imageData, NSString *dataUTI,
UIImageOrientation orientation,
NSDictionary *info)
NSLog(@"info = %@", info);
if ([info objectForKey:@"PHImageFileURLKey"])
// path looks like this -
// file:///var/mobile/Media/DCIM/###APPLE/IMG_####.JPG
NSURL *path = [info objectForKey:@"PHImageFileURLKey"];
];
【讨论】:
资产 = [fetchResult lastObject];打印最后捕获的图像文件名我希望所选图像对象不是最后一个 [fetchResult enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) NSLog(@"asset %@", asset); ]; 阅读文档将非常有帮助,因此您将对 PHAsset nshipster.com/phimagemanager 有一个很好的了解 我试过了,但它没有得到所选文件的名称,但它枚举了相册中的所有文件并打印了相应的名称 这确实提供了路径.. 但我看到的问题如下:Error Domain=NSCocoaErrorDomain Code=257
"The file “IMG_0811.JPG” couldn’t be opened because you don’t have permission to view it." UserInfo=
NSURL=file:///var/mobile/Media/DCIM/100APPLE/IMG_0811.JPG,
NSFilePath=/var/mobile/Media/DCIM/100APPLE/IMG_0811.JPG,
NSUnderlyingError=0x1744525d0 Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted" #Generic
```以上是关于替换 ALAssertLibrary 以获取文件名的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在不替换的情况下以编程方式修改/更新 plist 文件?
什么应该替换已弃用的 Facebook adView setAdListener 以获取回调?