Ограничьте результат выборки PHAsset только 3 активами

Мне нужно получить три фотографии, отсортированные по дате, когда последняя сделана самой последней. В настоящее время я делаю это, извлекая все фоторесурсы, а затем извлекая актив по соответствующим индексам (0, 1, 2). Хотя это работает, мне любопытно, есть ли более эффективный способ сделать это, когда меня интересуют только первые три. Документы объясняют, что выборка не возвращает все данные изображения — только метаданные, но мне все равно не нужно получать все метаданные. Есть ли PHFetchOption, который я мог бы использовать для ограничения выборки, или NSPredicate, или об этом не нужно беспокоиться?

var assetsFetchResults = PHAsset.fetchAssetsWithMediaType(.Image, options: nil)
let imageManager = PHCachingImageManager()

if assetsFetchResults?.count > 0 {
    var asset = assetsFetchResults?[0] as? PHAsset
    imageManager.requestImageForAsset(asset, targetSize: targetSize, contentMode: .AspectFill, options: nil, resultHandler: ...)
}
//repeat for index 1 and 2 

person Jordan H    schedule 02.05.2015    source источник
comment
Вы можете использовать fetchKeyAssetsInAssetCollection:options: для получения нескольких КЛЮЧЕВЫХ фотографий вместо fetchAssetsInAssetCollection:options:options:   -  person k06a    schedule 02.06.2015
comment
Это не работает в случае пользовательских библиотек приложений.   -  person jarora    schedule 07.06.2015
comment
@jarora У меня сработало в iOS 8.4.1 в альбоме, созданном сторонним приложением   -  person Jordan H    schedule 07.09.2015


Ответы (1)


поэтому в iOS 9 вы можете установить параметр PHFetchOptions, чтобы ограничить количество получаемых файлов. Например:

   let fetchOptions = PHFetchOptions()
    if #available(iOS 9.0, *) {
        fetchOptions.fetchLimit = 3
    } else {
        // Fallback on earlier versions
    }

Однако я также ищу способ сделать это на устройствах iOS 8, поскольку на данный момент нам все еще нужно поддерживать как iOS 8, так и 9.

person MadeByDouglas    schedule 12.11.2015