Hallo,
seit dem letzten Xcode Update funktioniert mein PHPhotoLibraryChangeObserver nicht mehr wie er soll. Wird die App zum ersten mal gestartet, wird der User nach Zugriff auf das Photo Album gefragt. Nachdem der User den Zugriff erlaubt hat, will ich die neuen fetch Ergebnisse über den PHPhotoLibraryChangeObserver sehen. Das funktioniert nur leider nicht mehr, so dass beim ersten Start keine Bilder im Album angezeigt werden. Erst bei einem erneutem öffnen der App funktioniert alles wie es soll und die Bilder werden angezeigt...
Mein Code dazu sieht wie folgt aus:
Alles anzeigen
Ich habe die Fehlerquelle auch schon ausgemacht, jedoch verstehe ich sie nicht. Die changeDetails geben immer wieder nil aus. Man könnte jetzt meinen das sich beim fetchen einfach nichts im Photo Album ändert, dass kann aber nicht sein. Hat vorher ja auch funktioniert. Aber ich verstehe halt nicht wieso ich hierbei dann einen nil Wert bekomme...
In meiner viewDidLoad() habe ich dann auch noch folgenden Code um den Observer aufzurufen:
Hat jemand vielleicht ne Idee was ich hier ausprobieren könnte oder wo das Problem liegt ? Selbst das Apple Beispiel Projekt funktioniert nicht mehr developer.apple.com/documentat…n_image_picker_controller
seit dem letzten Xcode Update funktioniert mein PHPhotoLibraryChangeObserver nicht mehr wie er soll. Wird die App zum ersten mal gestartet, wird der User nach Zugriff auf das Photo Album gefragt. Nachdem der User den Zugriff erlaubt hat, will ich die neuen fetch Ergebnisse über den PHPhotoLibraryChangeObserver sehen. Das funktioniert nur leider nicht mehr, so dass beim ersten Start keine Bilder im Album angezeigt werden. Erst bei einem erneutem öffnen der App funktioniert alles wie es soll und die Bilder werden angezeigt...
Mein Code dazu sieht wie folgt aus:
Quellcode
- extension MIPCollectionViewController: PHPhotoLibraryChangeObserver {
- func photoLibraryDidChange(_ changeInstance: PHChange) {
- print(changeInstance.changeDetails(for: fetchResult))
- guard let changes = changeInstance.changeDetails(for: fetchResult)
- else { return }
- DispatchQueue.main.sync {
- fetchResult = changes.fetchResultAfterChanges
- if changes.hasIncrementalChanges {
- guard let collectionView = self.collectionView else { fatalError() }
- collectionView.performBatchUpdates({
- if let removed = changes.removedIndexes, !removed.isEmpty {
- collectionView.deleteItems(at: removed.map({ IndexPath(item: $0, section: 0) }))
- }
- if let inserted = changes.insertedIndexes, !inserted.isEmpty {
- collectionView.insertItems(at: inserted.map({ IndexPath(item: $0, section: 0) }))
- }
- changes.enumerateMoves { fromIndex, toIndex in
- collectionView.moveItem(at: IndexPath(item: fromIndex, section: 0),
- to: IndexPath(item: toIndex, section: 0))
- }
- })
- if let changed = changes.changedIndexes, !changed.isEmpty {
- collectionView.reloadItems(at: changed.map({ IndexPath(item: $0, section: 0) }))
- }
- } else {
- collectionView.reloadData()
- }
- resetCachedAssets()
- }
- }
- }
Ich habe die Fehlerquelle auch schon ausgemacht, jedoch verstehe ich sie nicht. Die changeDetails geben immer wieder nil aus. Man könnte jetzt meinen das sich beim fetchen einfach nichts im Photo Album ändert, dass kann aber nicht sein. Hat vorher ja auch funktioniert. Aber ich verstehe halt nicht wieso ich hierbei dann einen nil Wert bekomme...
In meiner viewDidLoad() habe ich dann auch noch folgenden Code um den Observer aufzurufen: