首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速获取PHAsset信息?

快速获取PHAsset信息?
EN

Stack Overflow用户
提问于 2015-09-03 13:51:52
回答 1查看 875关注 0票数 3

我有一个检索PHAsset信息的方法,它可以工作,但是当读取数百个资产的信息时,它可能会非常慢。

读取有关资产(如文件大小和元数据)的信息的最佳方法是什么?

我目前的代码是:

代码语言:javascript
复制
- (void) getAssetInfo: (NSUInteger*) assetIndex {
    NSNumber *_assetIndex = [NSNumber numberWithUnsignedInteger: assetIndex];

    PHFetchOptions *fetchOptions;
    fetchOptions.sortDescriptors = @[ [NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES], ];
    PHFetchResult *fetchResult = [PHAsset fetchAssetsWithOptions:fetchOptions];

    PHAsset *asset = [fetchResult objectAtIndex: assetIndex];

    PHImageManager *imageManager = [PHImageManager defaultManager];
    PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init];
    options.synchronous = YES;
    options.version = PHImageRequestOptionsVersionCurrent;


    [asset requestContentEditingInputWithOptions:options
                               completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {

                                   NSString *fileInfo;

                                   NSString *assetURL = nil;

                                   if (contentEditingInput.avAsset != nil){

                                       AVURLAsset *avurlasset_ = (AVURLAsset*) contentEditingInput.avAsset;
                                       assetURL = [avurlasset_.URL absoluteString];

                                   } else {
                                       assetURL = [contentEditingInput.fullSizeImageURL absoluteString];
                                   }

                                   if (assetURL != nil){
                                       uint64_t fileSize;

                                       NSString *filePathFull = [assetURL substringWithRange: NSMakeRange(7, [assetURL length] - 7)];

                                       NSFileManager * filemanager = [[NSFileManager alloc]init];
                                       if([filemanager fileExistsAtPath:filePathFull]){
                                           fileSize = [[filemanager attributesOfItemAtPath:filePathFull error:nil] fileSize];
                                       }


                                       NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
                                       [dateFormatter setDateFormat:@"yyyy,MM,dd,HH,mm,ss"];

                                       NSArray *assembled_FI = [NSArray arrayWithObjects:
                                                                (NSNumber*) _assetIndex,
                                                                assetURL,
                                                                assetURL.lastPathComponent,
                                                                (NSNumber*)[NSNumber numberWithUnsignedLongLong: fileSize],
                                                                (NSString*) [dateFormatter stringFromDate:asset.creationDate],
                                                                nil];
                                }
                               }];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-24 02:20:29

最近在GitHub中添加了一个名为AssetManager的Swift 3小型库。

它简化了对资产的访问,并允许非常快速的数据提取。

到AssetManager的链接可以在这里找到:https://github.com/aidv/AssetManager

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32377589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档