Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека Разработчика iOS

Разработчик

Фото ссылка платформы ссылка класса PHFetchResultChangeDetails

Опции
Развертывание Target:

На этой странице
Язык:

PHFetchResultChangeDetails

Наследование


Соответствует


Оператор импорта


Swift

import Photos

Objective C

@import Photos;

Доступность


Доступный в iOS 8.0 и позже.

A PHFetchResultChangeDetails объект предоставляет подробную информацию о различиях между двумя результатами выборки — тот, который Вы ранее получили и обновленный, который закончился бы, если бы Вы выполнили ту же выборку снова. Подробный объект изменения предоставляет информацию, полезную для обновления UI, перечисляющего содержание результата выборки, такое как индексы добавленных, удаленных, и перестроенных объектов.

Отслеживание изменений

Как правило, Вы используете этот класс для отслеживания изменений в наборе (таких как альбом, момент или папка). Если Ваши отображения приложения элементы набора, Вы используете метод такой как fetchAssetsInAssetCollection:options: получить те элементы и затем сохранить получающееся PHFetchResult объект. Чтобы быть уведомленными относительно изменений в наборе, примите PHPhotoLibraryChangeObserver протокол и регистр Ваш наблюдатель с совместно используемым PHPhotoLibrary объект. Когда фотографии уведомят Вашего наблюдателя изменения, получите подробные данные изменения путем передачи более раннего результата выборки changeDetailsForFetchResult: метод.

Этот класс не описывает изменения в свойствах метаданных объекта — таких как заголовок набора — или содержание актива. Для такой информации передайте объект changeDetailsForObject: метод.

Можно также использовать changeDetailsFromFetchResult:toFetchResult:changedObjects: метод для получения подробной информации о различии между двумя произвольными результатами выборки.

Обработка изменений в порядке

Индексы, описанные изменением, детализируют объектное отражение определенный порядок операций — тот же порядок, который Вы используете для анимации изменений в UITableView и UICollectionView классы. Для корректного поддержания упорядочивания при обновлении интерфейса приложения для отражения изменений в результате выборки примените изменения в следующем порядке:

  1. Удалите элементы в индексах, указанных removedIndexes свойство.

  2. Вставьте элементы в индексах, указанных insertedIndexes свойство.

  3. Элементы обновления, указанные changedIndexes свойство.

  4. Используйте enumerateMovesWithBlock: метод для обработки элементов, расположения которых изменились.

  • fetchResultBeforeChanges Свойство

    Исходный результат выборки, без недавних изменений. (только для чтения)

    Объявление

    Swift

    var fetchResultBeforeChanges: PHFetchResult! { get }

    Objective C

    @property(atomic, strong, readonly) PHFetchResult *fetchResultBeforeChanges

    Обсуждение

    Значение этого свойства является тем же объектом, который Вы передали changeDetailsForFetchResult: метод для запроса подробных данных изменения.

    Оператор импорта

    Objective C

    @import Photos;

    Swift

    import Photos

    Доступность

    Доступный в iOS 8.0 и позже.

  • fetchResultAfterChanges Свойство

    Текущий результат выборки, включая недавние изменения. (только для чтения)

    Объявление

    Swift

    var fetchResultAfterChanges: PHFetchResult! { get }

    Objective C

    @property(atomic, strong, readonly) PHFetchResult *fetchResultAfterChanges

    Обсуждение

    Можно использовать этот объект проверить текущее состояние выбранных объектов даже если hasIncrementalChanges значение свойства NOfalse. Используя эту выборку результат эквивалентен выполнению еще раз той же выборки, возвратившей исходный результат выборки.

    Оператор импорта

    Objective C

    @import Photos;

    Swift

    import Photos

    Доступность

    Доступный в iOS 8.0 и позже.

  • hasIncrementalChanges Свойство

    Булево значение, указывающее, могут ли изменения в результате выборки быть описаны инкрементно. (только для чтения)

    Объявление

    Swift

    var hasIncrementalChanges: Bool { get }

    Objective C

    @property(atomic, assign, readonly) BOOL hasIncrementalChanges

    Обсуждение

    Если это значение YEStrue, используйте insertedIndexes, removedIndexes, и changedIndexes свойства (или insertedObjects, removedObjects, и changedObjects свойства) для обнаружения, какие объекты в результате выборки были добавлены, удалило, или обновленный. Можно также использовать hasMoves свойство и enumerateMovesWithBlock: метод для обнаружения, какие объекты в результате выборки были перестроены. Эти свойства могут быть полезны для обновления представления набора или подобного интерфейса, выводящего на экран содержание результата выборки.

    Если это значение NOfalse, результат выборки слишком отличается от своего исходного состояния для инкрементной информации об изменении, чтобы быть значимым. Используйте fetchResultAfterChanges свойство для получения текущего членства результата выборки. (При отображении содержания результата выборки перезагрузите пользовательский интерфейс для соответствия нового результата выборки.)

    Оператор импорта

    Objective C

    @import Photos;

    Swift

    import Photos

    Доступность

    Доступный в iOS 8.0 и позже.

  • removedIndexes Свойство

    Индексы, от которых объекты были удалены из результата выборки. (только для чтения)

    Объявление

    Swift

    var removedIndexes: NSIndexSet! { get }

    Objective C

    @property(atomic, strong, readonly) NSIndexSet *removedIndexes

    Обсуждение

    Используйте этот индексный набор для удаления элементов из представления набора или подобного пользовательского интерфейса, выводящего на экран содержание результата выборки. Эти индексы относительно исходного результата выборки ( fetchResultBeforeChanges свойство); при обновлении интерфейса приложения примените удаления перед вставками, изменениями и перемещениями.

    Если hasIncrementalChanges значение свойства NOfalse, значение этого свойства nil.

    Оператор импорта

    Objective C

    @import Photos;

    Swift

    import Photos

    Доступность

    Доступный в iOS 8.0 и позже.

  • removedObjects Свойство

    Элементы, удаленные из результата выборки. (только для чтения)

    Объявление

    Swift

    var removedObjects: [AnyObject]! { get }

    Objective C

    @property(atomic, strong, readonly) NSArray *removedObjects

    Обсуждение

    Этот массив может содержать PHAsset, PHAssetCollection, или PHCollectionList объекты или некоторая комбинация этого.

    Если hasIncrementalChanges значение свойства NOfalse, значение этого свойства nil.

    Оператор импорта

    Objective C

    @import Photos;

    Swift

    import Photos

    Доступность

    Доступный в iOS 8.0 и позже.

  • insertedIndexes Свойство

    Индексы, где новые объекты были вставлены в результат выборки. (только для чтения)

    Объявление

    Swift

    var insertedIndexes: NSIndexSet! { get }

    Objective C

    @property(atomic, strong, readonly) NSIndexSet *insertedIndexes

    Обсуждение

    Использование этот индексный набор может для вставки элементов в представление набора или подобный пользовательский интерфейс, выводящий на экран содержание результата выборки. Эти индексы относительно исходного результата выборки ( fetchResultBeforeChanges свойство) после применения изменений, описанных removedIndexes свойство; при обновлении интерфейса приложения примените вставки после удалений и перед изменениями и перемещениями.

    Если hasIncrementalChanges значение свойства NOfalse, значение этого свойства nil.

    Оператор импорта

    Objective C

    @import Photos;

    Swift

    import Photos

    Доступность

    Доступный в iOS 8.0 и позже.

    См. также

    insertedObjects

  • insertedObjects Свойство

    Новые элементы, вставленные в результат выборки. (только для чтения)

    Объявление

    Swift

    var insertedObjects: [AnyObject]! { get }

    Objective C

    @property(atomic, strong, readonly) NSArray *insertedObjects

    Обсуждение

    Этот массив может содержать PHAsset, PHAssetCollection, или PHCollectionList объекты или некоторая комбинация этого.

    Если hasIncrementalChanges значение свойства NOfalse, значение этого свойства nil.

    Оператор импорта

    Objective C

    @import Photos;

    Swift

    import Photos

    Доступность

    Доступный в iOS 8.0 и позже.

    См. также

    insertedIndexes

  • changedIndexes Свойство

    Индексы объектов в выборке заканчиваются, чье содержание или метаданные были обновлены. (только для чтения)

    Объявление

    Swift

    var changedIndexes: NSIndexSet! { get }

    Objective C

    @property(atomic, strong, readonly) NSIndexSet *changedIndexes

    Обсуждение

    Используйте этот индексный набор для обновления элементов в представлении набора или подобном пользовательском интерфейсе, выводящем на экран содержание результата выборки. Эти индексы относительно исходного результата выборки ( fetchResultBeforeChanges свойство) после применения изменений, описанных removedIndexes и insertedIndexes свойства; при обновлении интерфейса приложения примените изменения после удалений и вставок и перед перемещениями.

    Если hasIncrementalChanges значение свойства NOfalse, значение этого свойства nil.

    Оператор импорта

    Objective C

    @import Photos;

    Swift

    import Photos

    Доступность

    Доступный в iOS 8.0 и позже.

  • changedObjects Свойство

    Объекты в выборке заканчиваются, чье содержание или метаданные были обновлены. (только для чтения)

    Объявление

    Swift

    var changedObjects: [AnyObject]! { get }

    Objective C

    @property(atomic, strong, readonly) NSArray *changedObjects

    Обсуждение

    Массив PHAsset, PHAssetCollection, или PHCollectionList объекты.

    Если hasIncrementalChanges значение свойства NOfalse, значение этого свойства nil.

    Оператор импорта

    Objective C

    @import Photos;

    Swift

    import Photos

    Доступность

    Доступный в iOS 8.0 и позже.

  • hasMoves Свойство

    Булево значение, указывающее, были ли объекты перестроены в результате выборки. (только для чтения)

    Объявление

    Swift

    var hasMoves: Bool { get }

    Objective C

    @property(atomic, assign, readonly) BOOL hasMoves

    Обсуждение

    Если это значение YEStrue, используйте enumerateMovesWithBlock: метод для обнаружения, какие элементы были перемещены и каковы их новые индексы.

    Оператор импорта

    Objective C

    @import Photos;

    Swift

    import Photos

    Доступность

    Доступный в iOS 8.0 и позже.

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

    Объявление

    Swift

    func enumerateMovesWithBlock(_ handler: ((Int, Int) -> Void)!)

    Objective C

    - (void)enumerateMovesWithBlock:(void (^)(NSUInteger fromIndex, NSUInteger toIndex))handler

    Параметры

    handler

    Блок, который фотографии вызывают для предоставления подробной информации, о которой объекты в результате выборки переместились в который индексы.

    Блок берет следующие параметры:

    fromIndex

    Индекс объекта в исходном результате выборки.

    toIndex

    Индекс, к которому объект переместился в новый результат выборки.

    Обсуждение

    toIndex параметр в handler блок относительно состояния результата выборки после применения изменений, описанных removedIndexes, insertedIndexes и changedIndexes свойства. Поэтому при использовании этого метода, чтобы обновить представление набора или подобный пользовательский интерфейс, выводящий на экран содержание результата выборки, обновить UI для отражения вставок, удалений и изменений перед обработкой перемещений.

    Оператор импорта

    Objective C

    @import Photos;

    Swift

    import Photos

    Доступность

    Доступный в iOS 8.0 и позже.

  • Создает подробный объект изменения, суммирующий различия между двумя результатами выборки.

    Объявление

    Swift

    convenience init!(fromFetchResult fromResult: PHFetchResult!, toFetchResult toResult: PHFetchResult!, changedObjects changedObjects: [AnyObject]!)

    Objective C

    + (instancetype)changeDetailsFromFetchResult:(PHFetchResult *)fromResult toFetchResult:(PHFetchResult *)toResult changedObjects:(NSArray *)changedObjects

    Параметры

    fromResult

    Результат выборки, который будет обработан как «перед» состоянием в получающемся изменении, детализирует объект.

    toResult

    Результат выборки, который будет обработан как «после» состояния в получающемся изменении, детализирует объект.

    changedObjects

    Набор объектов вручную отметить, как изменено между двумя результатами выборки, или nil проигнорировать объектные изменения. Посмотрите обсуждение для подробных данных.

    Возвращаемое значение

    Изменение детализирует объект.

    Обсуждение

    Как правило, Вы используете PHChange класс для получения PHFetchResultChangeDetails объекты, описывающие любые изменения, произошедшие, так как Вы выполнили выборку, но можно также использовать этот метод для получения изменения, детализируют объект, суммирующий различие между двумя произвольными PHFetchResult объекты. В этом случае фотографии не могут автоматически определить, когда те же объекты присутствуют в обоих результатах выборки, но содержание тех объектов изменилось, таким образом, changedIndexes и changedObjects свойства пусты.

    Однако можно использовать changedObjects параметр для ручного замечания объектов, как изменено. Например, рассмотрите контроллер представления, поддерживающий основной результат выборки, представляющий список альбомов и переходный набор, фильтрующий список согласно критериям поиска пользователя. Для этого потока операций Вы могли бы использовать метод как следующее:

    Swift

    • func filterFetchResult(fetchResult: PHFetchResult) -> PHFetchResult {
    • var filteredAlbums: [PHCollection] = []
    • fetchResult.enumerateObjectsUsingBlock { object, _, _ in
    • if let collection = object as? PHCollection {
    • if collection.localizedTitle.hasPrefix(self.searchBar.text) {
    • filteredAlbums += [collection]
    • }
    • }
    • }
    • let filteredList = PHCollectionList.transientCollectionListWithCollections(filteredAlbums, title: nil)
    • return PHCollection.fetchCollectionsInCollectionList(filteredList, options: nil)
    • }

    Objective C

    • - (PHFetchResult *)filterFetchResult:(PHFetchResult *)fetchResult
    • {
    • NSMutableArray *filteredAlbums = [NSMutableArray arrayWithCapacity:fetchResult.count];
    • for (PHCollection *collection in fetchResult) {
    • if ([collection.localizedTitle hasPrefix:self.searchBar.text]) {
    • [filteredAlbums addObject:collection];
    • }
    • }
    • PHCollectionList *filteredList = [PHCollectionList transientCollectionListWithCollections:filteredAlbums title:nil];
    • return [PHCollection fetchCollectionsInCollectionList:filteredList options:nil];
    • }

    Поскольку переходные наборы не сохранены в фото библиотеке, фотографии не могут предоставить подробную информацию изменения для результатов выборки против переходного набора. photoLibraryDidChange: метод предоставляет подробную информацию изменения для основного результата выборки, который можно использовать для запроса подробных данных изменения на отфильтрованный результат выборки:

    Swift

    • func photoLibraryDidChange(changeInstance: PHChange) {
    • // This method may be called on a background queue; dispatch to the main queue to update the UI.
    • dispatch_async(dispatch_get_main_queue()) {
    • if let fetchResultChangeDetails = changeInstance.changeDetailsForFetchResult(self.baseFetchResult) {
    • // Get the new base fetch result and filter it to get a new filtered result.
    • self.baseFetchResult = fetchResultChangeDetails.fetchResultAfterChanges
    • let previousFilteredFetchResult = self.filteredFetchResult
    • self.filteredFetchResult = self.filterFetchResult(self.baseFetchResult)
    • // Get the changed objects between the original and new base fetches, and use them for marking changes between the filtered fetches.
    • let changedObjects = fetchResultChangeDetails.changedObjects
    • let filteredChangeDetails: PHFetchResultChangeDetails? = PHFetchResultChangeDetails(fromFetchResult: previousFilteredFetchResult, toFetchResult: self.filteredFetchResult, changedObjects: changedObjects)
    • // Use the filtered change details to update the UI.
    • if filteredChangeDetails {
    • self.updateViewForChangeDetails(filteredChangeDetails!)
    • }
    • }
    • }
    • }

    Objective C

    • - (void)photoLibraryDidChange:(PHChange *)changeInstance
    • {
    • // This method may be called on a background queue; dispatch to the main queue to update the UI.
    • dispatch_async(dispatch_get_main_queue(), ^{
    • PHFetchResultChangeDetails *fetchResultChangeDetails = [changeInstance changeDetailsForFetchResult:self.baseFetchResult];
    • if (fetchResultChangeDetails) {
    • // Get the new base fetch result and filter it to get a new filtered result.
    • self.baseFetchResult = fetchResultChangeDetails.fetchResultAfterChanges;
    • PHFetchResult *previousFilteredFetchResult = self.filteredFetchResult;
    • self.filteredFetchResult = [self filterFetchResult:self.baseFetchResult];
    • // Get the changed objects between the original and new base fetches, and use them for marking changes between the filtered fetches.
    • NSArray *changedObjects = [fetchResultChangeDetails changedObjects];
    • PHFetchResultChangeDetails *filteredChangeDetails = [PHFetchResultChangeDetails changeDetailsFromFetchResult:previousFilteredFetchResult toFetchResult:self.filteredFetchResult changedObjects:changedObjects];
    • // Use the filtered change details to update the UI.
    • if (filteredChangeDetails) {
    • [self updateViewForChangeDetails:filteredChangeDetails];
    • }
    • }
    • });
    • }

    Поскольку Вы обеспечиваете changedObjects массив от исходного изменения детализирует при вызове changeDetailsFromFetchResult:toFetchResult:changedObjects: метод, фотографии могут обеспечить включающую сводку различий между отфильтрованными результатами выборки changedIndexes и changedObjects информация. Можно тогда использовать эту информацию для того, чтобы эффективно обновить интерфейс приложения — для примера того, как сделать это, посмотрите Ссылку на протокол PHPhotoLibraryChangeObserver.

    Оператор импорта

    Objective C

    @import Photos;

    Swift

    import Photos

    Доступность

    Доступный в iOS 8.0 и позже.