Извлекать только фотографии типа PHAssetMediaTypeImage из коллекции активов типа PHAssetCollectionTypeSmartAlbum

Я использую платформу Photos для получения списка альбомов в iOS8. Я могу сделать это, используя

PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];

Это дает мне список всех умных альбомов, включая видео. Как я могу отфильтровать видео из этого списка. Мне нужны только изображения.

Помощь приветствуется. Спасибо.


person bhoomi    schedule 22.01.2015    source источник


Ответы (2)


Вы должны настроить параметры выборки, у них есть свойство predicate, которое можно использовать для фильтрации видео. Ниже приведен пример того, как это сделать.

PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];

//set up fetch options, mediaType is image.
PHFetchOptions *options = [[PHFetchOptions alloc] init];
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
options.predicate = [NSPredicate predicateWithFormat:@"mediaType = %d",PHAssetMediaTypeImage];

for (NSInteger i =0; i < smartAlbums.count; i++) {
    PHAssetCollection *assetCollection = smartAlbums[i];
    PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:options];

    NSLog(@"sub album title is %@, count is %ld", assetCollection.localizedTitle, assetsFetchResult.count);
    if (assetsFetchResult.count > 0) {
        for (PHAsset *asset in assetsFetchResult) {
            //you have got your image type asset.
        }
    }
}
person gabbler    schedule 22.01.2015
comment
@grabler выдает эту ошибку: Unsupported predicate in fetch options: mediaType == 1 - person Anish Kumar; 24.02.2016
comment
@AnishKumar, со мной такого не происходит, из здесь аналогичная проблема в iOS 9.1 , попробуйте обновиться до iOS 9.2. - person gabbler; 24.02.2016
comment
@AnishKumar @gabbler Связанная тема с форумов разработчиков посвящена предикату, включающему title, а не mediaType. Я столкнулся с этой ошибкой при попытке использовать этот предикат для PHAssetCollection.fetchAssetCollectionsWithType(). Из документации для разработчиков видно, что mediaType не поддерживается для получения PHAssetCollections только для получения PHAsset - person vander2675; 29.07.2019

Чтобы сделать то же самое в swift :

let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.Image.rawValue)
person Max    schedule 20.01.2016