将UIImage保存到PHAssetCollection

时间:2015-07-03 02:46:25

标签: ios photosframework

我使用以下代码尝试将新图像保存到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 个答案:

答案 0 :(得分:1)

一般来说,你做的事情是错误的;你不应该在performChanges块内进行任何提取。无论如何,你不必这样做。根本不要取得收藏品。只需创建简单明了的照片,就像在第一行中一样 - 除了您甚至不需要保留对更改请求的引用:

[PHAssetChangeRequest creationRequestForAssetFromImage:image];

......然后停下来。此时照片已添加到相机胶卷中。

我只是试过这个并且效果很好。

(当然我假设你已经从用户那里获得了必要的权限......!)