Исключить общие альбомы 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
проверка не должна быть необходимой.