将 UIImage 保存到 PHAssetCollection
Save UIImage to PHAssetCollection
我正在使用以下代码尝试将新图像保存到 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.)
如何才能将我的新图像成功保存到用户的图库中?谢谢
一般来说,你做事的顺序是错误的;你不应该在 performChanges
块中进行任何提取。在任何情况下,您都不必这样做。根本不要获取集合。只需创建照片,简单明了,与第一行完全一样 - 除了您甚至不需要保留对更改请求的引用:
[PHAssetChangeRequest creationRequestForAssetFromImage:image];
...停止。此时照片已添加到相机胶卷。
我刚刚试过了,效果很好。
(当然我假设你已经从用户那里获得了必要的权限...!)
我正在使用以下代码尝试将新图像保存到 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.)
如何才能将我的新图像成功保存到用户的图库中?谢谢
一般来说,你做事的顺序是错误的;你不应该在 performChanges
块中进行任何提取。在任何情况下,您都不必这样做。根本不要获取集合。只需创建照片,简单明了,与第一行完全一样 - 除了您甚至不需要保留对更改请求的引用:
[PHAssetChangeRequest creationRequestForAssetFromImage:image];
...停止。此时照片已添加到相机胶卷。
我刚刚试过了,效果很好。
(当然我假设你已经从用户那里获得了必要的权限...!)