首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在用UIImage获取时无法将PhotoKit转换为PhotoKit

在用UIImage获取时无法将PhotoKit转换为PhotoKit
EN

Stack Overflow用户
提问于 2015-09-10 07:19:49
回答 1查看 539关注 0票数 0

我的场景是,选择从PhotoKit系统相册中获取并在UICollectionView中呈现的照片之一,并将选定的照片(UIImage)传递给下一个UIView,并以NSData的形式将其发送到远程服务器。但是,当我在发送之前放置断点来跟踪NSData时,我发现UIImage有分配内存的数据,而NSData没有。

下面是获取UIImage的代码(请注意,我没有指定任何PHImageRequestOptions对象):

代码语言:javascript
复制
NSMutableArray *images = @[].mutableCopy;
PHImageManager *manager = [PHImageManager defaultManager];
PHAsset *asset = _photoPickerCollectionView.pickedAsset;
CGSize targetSize = CGSizeMake(asset.pixelWidth*0.5, asset.pixelHeight*0.5);
[manager requestImageForAsset:asset targetSize:targetSize contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage *result, NSDictionary *info) {
    _nextView.pickedOne = result;
}];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];

我像这样将UIImage转换为NSData

代码语言:javascript
复制
UIImage *image = _pickedOne;
NSData *imgData = UIImageJPEGRepresentation(image, imageQuality);

当我跟踪变量时,UIImage包含如下数据:

但是NSDatanil,如下所示:

奇怪的是,如果我为PHImageRequestOptions对象指定了一个PHImageManager请求图像的对象,那么NSData就不是nil了。我不知道在使用或不使用PHImageRequestOptions时发生了什么变化,以及为什么会产生这样的差异。

更新:我发现,如果您将PHImageRequestOptions指定为nil,那么默认选项将强制它异步获取照片,在我看来,这对于NSData来说可能是不稳定的,所以当我指定options.synchronous = YES;时,它就会工作。

但是在这种情况下,它会不会导致任何保留周期,或者某些PhotoKit对象不会被释放?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-24 06:03:30

默认情况下,该方法是异步的。您需要设置选项来显式地使图像获取同步。我对这种转换的强烈建议是使用这个API:

代码语言:javascript
复制
- (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset options:(nullable PHImageRequestOptions *)options resultHandler:(void(^)(NSData *__nullable imageData, NSString *__nullable dataUTI, UIImageOrientation orientation, NSDictionary *__nullable info))resultHandler;

这将直接返回数据,但您也必须使此同步。这不会对任何对象造成任何保留周期。希望这能有所帮助。:)

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

https://stackoverflow.com/questions/32495526

复制
相关文章

相似问题

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