将 UIImage 保存到 PHAssetCollection
Posted
技术标签:
【中文标题】将 UIImage 保存到 PHAssetCollection【英文标题】:Save UIImage to PHAssetCollection 【发布时间】:2015-07-03 02:46:25 【问题描述】:我正在使用以下代码尝试将新图像保存到PHAssetCollection
,特别是相机胶卷(又名用户库):
[[phphotoLibrary sharedPhotoLibrary] performChanges:^
PHAssetChangeRequest *assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:nil];
PHAssetCollection *assetCollection = fetchResult[0];
if (assetCollection)
PHAssetCollectionChangeRequest *assetCollectionChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];
[assetCollectionChangeRequest addAssets:@[[assetChangeRequest placeholderForCreatedAsset]]];
completionHandler:^(BOOL success, NSError *error)
if (!success)
NSLog(@"Error creating asset: %@", error);
];
我总是出错。
执行块中的所有对象看起来都很好:
(lldb) po image
<UIImage: 0x174289ec0>, 1080, 1466
(lldb) po assetCollection
<PHAssetCollection: 0x1741d5540> F6705124-D49B-4FDC-9191-7E84CFCCD148/L0/040 Camera Roll assetCollectionType=2/209
(lldb) po assetCollectionChangeRequest
<PHAssetCollectionChangeRequest: 0x170264640> title=(null) hasAssetChanges=1
而且错误信息非常无用:
The operation couldn’t be completed. (Cocoa error -1.)
我怎样才能成功地将我的新图像保存到用户的库中?谢谢。
【问题讨论】:
【参考方案1】:一般来说,你做事的顺序是错误的;您不应该在 performChanges
块内进行任何获取。在任何情况下,您都不必这样做。根本不获取集合。只需像第一行一样创建简单明了的照片 - 除了您甚至不需要保留对更改请求的引用:
[PHAssetChangeRequest creationRequestForAssetFromImage:image];
...然后停下来。此时照片已添加到相机胶卷中。
我刚试过,效果很好。
(当然我假设你已经从用户那里获得了必要的权限......!)
【讨论】:
谢谢,马特。我被***.com/questions/26065774/…弄糊涂了 是的,但这是问题。他有麻烦是因为他做错了——就像你一样。 answer 就是您要查看的内容:***.com/a/26915282/341994 事实上,我就是从那里得到答案的! (当然,我确实为自己测试过。)以上是关于将 UIImage 保存到 PHAssetCollection的主要内容,如果未能解决你的问题,请参考以下文章