从assets-library URL获取NSData[英] Get NSData from assets-library URL

本文是小编为大家收集整理的关于从assets-library URL获取NSData的处理方法,想解了从assets-library URL获取NSData的问题怎么解决?从assets-library URL获取NSData问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在尝试从设备库中的 mp4 文件中获取 NSData.

此链接如下所示:

assets-library://asset/asset.mp4?id=32515720-939A-456F-958F-0B2F397416EB&ext=mp4

我试过这段代码:

ALAssetRepresentation *rep = [asset defaultRepresentation];
Byte *buffer = (Byte*)malloc((NSUInteger)rep.size);
NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:(NSUInteger)rep.size error:nil];
NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];

但 defaultRepresentation 在 iOS 9 中已弃用.

我也试过 [NSData dataWithContentsOfFile:url]; 但它返回 nil.

推荐答案

整个 ALAsset 类在 iOS 9 中已弃用.您现在应该考虑改用 PHAsset.有一个 API 可以从旧资产 url ALAsset 获取 PHAsset.请参阅 以下:

<块引用>

资产库框架在 iOS 8.0 及更高版本中已弃用,取而代之的是照片框架.如果您的应用之前存储了来自 ALAsset 对象的 URL,并且您需要检索相应的照片框架对象,请使用此方法.

+ (PHFetchResult<PHAsset *> *)fetchAssetsWithALAssetURLs:(NSArray<NSURL *> *)assetURLs
                                                 options:(PHFetchOptions *)options

然后您可以使用以下 方法在PHImageManager中获取PHAsset的NSData:

- (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset
                                     options:(PHImageRequestOptions *)options
                               resultHandler:(void (^)(NSData *imageData,
                                                       NSString *dataUTI,
                                                       UIImageOrientation orientation,
                                                       NSDictionary *info))resultHandler

本文地址:https://www.itbaoku.cn/post/924426.html