В предыдущей статье я писал, как загружать видео из альбомов. В этой статье я напишу, как отслеживать изменения и вносить необходимые изменения в ваше приложение.
Если вы не видели предыдущую статью,
Чтобы наблюдать за изменениями, нам нужно добавить и реализовать протокол. ЭтоPHPhotoLibraryChangeObserver
.
class ViewController: UIViewController, PHPhotoLibraryChangeObserver { }
Как мы видели в предыдущей статье, мы загружаем видео и регистрируем наш класс, чтобы наблюдать за изменениями ..
PHPhotoLibrary.shared().register(self)
Давайте понаблюдаем…
public func photoLibraryDidChange(_ changeInstance: PHChange)
Это метод, который мы собираемся реализовать. Это из протокола PHPhotoLibraryChangeObserver
.
let fetchResultChangeDetails = changeInstance.changeDetails(for: assetsFetchResult)
из changeInstance
мы можем получить подробную информацию об изменениях, например, что было удалено или добавлено, предоставив текущие полученные результаты assetsFetchResult
. Поэтому он будет знать, что нового, по старым результатам.
если fetchResultChangeDetails
равно nil
, новых изменений нет. Обязательно проверьте, было ли это nil
или нет. В противном случае произойдет сбой.
assetsFetchResult = (fetchResultChangeDetails?.fetchResultAfterChanges)!
Сбросьте assetsFetchResult
после того, как fetchResultChangeDetails
внесет новые изменения, получив (fetchResultChangeDetails?.fetchResultAfterChanges)!
.
Тогда вы сможете увидеть, что было добавлено или удалено
let insertedObjects = fetchResultChangeDetails?.insertedObjects let removedObjects = fetchResultChangeDetails?.removedObjects
Вставленные объекты и удаленные объекты содержат массив PHAsset
.[PHAsset]
.
Просто переберите массивы и внесите необходимые изменения в свое приложение.
Итак, конечный результат такой ...
func photoLibraryDidChange(_ changeInstance: PHChange) { let fetchResultChangeDetails = changeInstance.changeDetails(for: assetsFetchResult) guard (fetchResultChangeDetails) != nil else { print("No change in fetchResultChangeDetails") return; } print("Contains changes") assetsFetchResult = (fetchResultChangeDetails?.fetchResultAfterChanges)! let insertedObjects = fetchResultChangeDetails?.insertedObjects let removedObjects = fetchResultChangeDetails?.removedObjects }
Надеюсь, вы знаете, как отслеживать изменения и применять необходимые изменения в своих будущих приложениях.
Наслаждайтесь 😊