ios - 将 UIImage 保存到 PHAssetCollection

标签 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);
    }
}];

我总是收到错误。

执行 block 中的所有对象看起来都很好:

(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 block 内进行任何提取。在任何情况下,您都不必这样做。根本不要获取集合。只需创建照片,简单明了,与第一行完全相同 - 只不过您甚至不需要保留对更改请求的引用:

[PHAssetChangeRequest creationRequestForAssetFromImage:image];

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

我刚刚试过了,效果很好。

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

关于ios - 将 UIImage 保存到 PHAssetCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31197665/

相关文章:

ios - Photokit 保留用户相册列表顺序

ios - 如何在不从照片应用程序中删除 Assets /照片的情况下从相册中删除 Assets ?

ios - 照片框架 requestImageDataForAsset 偶尔会失败

ios - Couchbase LiveQuery 无法与 "rows"之外的其他 keyPath 一起使用

ios - 在 AVSpeechUtterance 之后使用 SFSpeechRecognizer 时出现 AVAudioSession 问题

ios - 用于本地存储和显示服务器临时数据的核心数据 - 什么是最佳设计

ios - 监听从库/框架终止的应用程序?

ios - 来自 PHAsset url 的 NSInputStream - iOS 照片框架

Swift 3 将数据转换为 AVAsset 或 PHAsset

android - 为 "put on homescreen"功能定义 URL