Как получить только изображения из смарт-альбомов с помощью NSPredicate в Swift 4.2? - PullRequest
0 голосов
/ 30 декабря 2018

Я хочу получить изображения из всех смарт-альбомов на телефоне пользователя.На данный момент я загружаю изображения и видео, но это не то, что я хочу.

В своих исследованиях я всегда находил одно и то же решение, но, похоже, оно больше не работает, поскольку вопросам уже несколько лет.сейчас.Поэтому я не могу найти какое-либо современное решение.

Это решение, которое я нашел

let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.image.rawValue)

let smartAlbums = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .any, options: fetchOptions)
let fetchAssetsResult = PHAsset.fetchAssets(in: collection, options: fetchOptions)

При выполнении этой строки кода я получаю следующее сообщение об ошибке

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unsupported predicate in fetch options: mediaType == 1'

Есть ли новое рабочее решение?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

С помощью Баппадитьи я узнал, что использовал предикат при неверной выборке активов.Ключ mediaType предназначен только для PHAsset.fetchAsset(), а не для PHAssetCollection.fetchAssetCollection(), как я его использовал.

Этот код работает сейчас

let fetchOptions = PHFetchOptions()
let smartAlbums = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .any, options: fetchOptions)

fetchOptions.predicate = NSPredicate(format: "mediaType == %d", PHAssetMediaType.image.rawValue)
let fetchAssetsResult = PHAsset.fetchAssets(in: collection, options: fetchOptions)
0 голосов
/ 30 декабря 2018

Try,

let albumName = "Your Album Name" or "Your Album Local Identifier"
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "title = %@", albumName)
let fetchResult: PHFetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)

Поддерживаемые ключи:

image

Для получения более подробной информации см. PHFetchOptions

...