ios - 通过获取 Assets 集合排除 iCloud 共享相册

标签 ios phassetcollection phassetslibrary

我正在尝试获取用户照片库中所有相册的列表,不包括任何 iCloud 共享相册。这是我到目前为止使用的代码:

PHFetchOptions *userAlbumsOptions = [PHFetchOptions new];
userAlbumsOptions.predicate = [NSPredicate predicateWithFormat:@"estimatedAssetCount > 0"];
userAlbumsOptions.includeAssetSourceTypes = PHAssetSourceTypeUserLibrary;

PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:userAlbumsOptions];

for (PHAssetCollection *album in userAlbums) {
    [self.albums addObject:album];
}

如果我理解正确,userAlbumsOptions.includeAssetSourceTypes属性应该过滤掉 iCloud 共享相册;但是,它们仍然显示在列表中。谁能建议我可能做错了什么?

最佳答案

一种可能的解决方案:

PHFetchOptions *userAlbumsOptions = [PHFetchOptions new];
userAlbumsOptions.predicate = [NSPredicate predicateWithFormat:@"estimatedAssetCount > 0"];

PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:userAlbumsOptions];

for (PHAssetCollection *album in userAlbums) {
    if (album.assetCollectionSubtype != PHAssetCollectionSubtypeAlbumCloudShared) {
        [self.albums addObject:album];
    }
}

基本上,检索所有 Assets 集合,但仅当子类型不是 PHAssetCollectionSubtypeAlbumCloudShared 时才将它们添加到专辑数组中.这行得通,但我对此并不满意。 PHAssetCollectionSubtypeAlbumCloudShared检查不应该是必要的。

关于ios - 通过获取 Assets 集合排除 iCloud 共享相册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44864766/

相关文章:

ios - Alamofire 在 swift 5 中响应无效的 json

ios - 如何使用 San Francisco 字体在 Qt/QML 程序中为 ios 设计界面?

ios - estimatedAssetCount 返回错误的计数

ios - 使用 Assets 资源获取 Assets 失败,错误为 "null"

ios - PHAsset CLLocation 未提供与照片应用相同的位置

ios - 通过 UIViewRepresentable 在 SwiftUI 中调整 UILabel 的大小,如 Text 以包裹多行

ios - 在 performBlock 中多次保存上下文

ios - 快速获取屏幕截图(相册)计数

ios - 如何将 PHAsset 的引用从 "All Photos"/"Camera Roll"移动到特定的 PHAssetCollection?

swift - 根据 Swift 中的 creationDate 从库中获取所有照片 [更快的方法?]