Исключить общие альбомы iCloud с получением коллекций активов

Я пытаюсь получить список всех альбомов в библиотеке фотографий пользователя, за исключением любых общих альбомов 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; однако они все еще отображаются в списке. Кто-нибудь может подсказать, что я могу делать не так?

1 ответ

Решение

Одно из возможных решений:

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];
    }
}

В основном, извлекайте все коллекции активов, но только добавляйте их в массив альбомов, если подтип не PHAssetCollectionSubtypeAlbumCloudShared, Это работает, но я не доволен этим. PHAssetCollectionSubtypeAlbumCloudShared проверка не должна быть необходимой.

Другие вопросы по тегам