【问题标题】:Replacing ALAssertLibrary to get the filename替换 ALAssertLibrary 以获取文件名
【发布时间】: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];

我面临的问题是,

  1. Xcode 会抛出一条警告消息,指出不推荐使用 ALAssetsLibraryAssetForURLResultBlock。如何替换上面的代码来获取文件名?
  2. 我尝试使用 PHAsset,但每次选择文件时,所有图像文件的文件名都相同,称为 asset.jpg

【问题讨论】:

    标签: ios objective-c alassetslibrary


    【解决方案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```
    猜你喜欢
    • 2012-09-17
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多