Как получить PHAssets в порядке добавления даты с помощью fetchAssests - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь получить PHAssets из Camera roll, iCloud и Photostream в том же порядке, в котором они были добавлены пользователем. В ios 11 я использую

PHFetchOptions *options = [[PHFetchOptions alloc] init];
PHFetchResult *fetchResults = [PHAsset fetchAssetsWithOptions:options];

Но это перестало работать в iOS 12. При использовании этого изображения iCloud и изображений с камеры появляются отдельно. Существует только 2 дескриптора сортировки, предоставленных creationDate иifiedDate.

Второе решение, которое я попробовал, состояло в том, чтобы получить фотографии из «пользовательской библиотеки», используя умный альбом. «Пользовательская библиотека» работает по-разному в зависимости от того, включил ли пользователь библиотеку iCloud. Если библиотека iCloud включена, то библиотека пользователя содержит все изображения с камеры и библиотеки iCloud. Если библиотека iCloud выключена, то пользовательская библиотека содержит только изображения с камеры. Это возвращает изображения из фотопленки и библиотеки iCloud в правильном порядке. Проблема в том, что он не может получить изображения из Фотопотока.

В другом решении фотографии были извлечены из пользовательской библиотеки, если библиотека iCloud включена, а если iCloud выключена, то они выбираются с использованием старого метода, что дает нам правильный порядок фотопотока и изображений с камеры.

Это решение также не сработало.

Пожалуйста, проверьте следующий сценарий:

  • Библиотека iCloud выключена, а Photostream включен. Мы будем использовать fetchAssetsWithOption с параметрами по умолчанию. Порядок будет правильным.
  • Пользователь включает iCloud. Фотопоток автоматически отключается. Мы будем загружать фотографии из «пользовательской библиотеки». Предоставляя нам все изображения из iCloud, а также снимок камеры, отсортированный по умолчанию. Порядок будет правильным.
  • Теперь пользователь отключает библиотеку iCloud. Все изображения из iCloud должны быть удалены с устройства. Но некоторые изображения из iCloud остаются в рулоне камеры. Они не удаляются (возможно, из-за ошибки в iCloud). В результате эти неотображенные изображения всегда появляются сверху. Это также происходит, если пользователь загружает изображения из iCloud и не удаляет изображение при выключенном iCloud.

Так есть ли способ сделать это.

1 Ответ

0 голосов
/ 17 сентября 2018

Ответ обновляется для iOS 13, где использование 'smartAlbumRecentlyAdded' работает лучше, чем 'smartAlbumUserLibrary', потому что поведение изменилось: Apple отправила отзыв об изменении поведения в iOS 13. Надеюсь, будет найдено лучшее решение,

Поскольку smartAlbumRecentlyAdded будет возвращать элементы по дате их добавления, вы не получите ВСЕ элементы, только ПОСЛЕДНИЕ элементы.

    var fetchResult:PHFetchResult<PHAssetCollection>

    if #available(iOS 13.0, *) {
        fetchResult = PHAssetCollection.fetchAssetCollections(with:.smartAlbum,subtype:.smartAlbumRecentlyAdded,options: nil)
    }
    else {
        fetchResult = PHAssetCollection.fetchAssetCollections(with:.smartAlbum,subtype:.smartAlbumUserLibrary,options: nil)
    }

    if let assetCollection = fetchResult.firstObject {
        self.allPhotos = PHAsset.fetchAssets(in: assetCollection, options: nil)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...