photoLibrary ist beim ersten Start nicht vorhanden

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • photoLibrary ist beim ersten Start nicht vorhanden

    Hallo,

    ich versuche aktuell die photoLibrary in einer CollectionView darzustellen. Funktioniert so weit auch, nur leider habe ich das Problem das beim ersten Start der App das ganze nicht geladen wird oder angezeigt wird (Es wird beim ersten Start also immer erst "You got no photos" in die Konsole geprintet). Erst nach einem schließen und erneutem öffnen der App sehe ich dann meine PhotoLibrary.

    Jetzt die Frage, woran liegt das und was kann ich dagegen tun ?

    Hier die Funktion:

    Quellcode

    1. func grabPhotos() {
    2. let imgManager = PHImageManager.default()
    3. let requestOptions = PHImageRequestOptions()
    4. requestOptions.isSynchronous = true
    5. requestOptions.deliveryMode = .highQualityFormat
    6. //Nach Datum ordnen
    7. let fetchOptions = PHFetchOptions()
    8. fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
    9. if let fetchResult: PHFetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions) {
    10. if fetchResult.count > 0 {
    11. for i in 0..<fetchResult.count {
    12. imgManager.requestImage(for: fetchResult.object(at: i) , targetSize: CGSize(width: 200, height: 200), contentMode: .aspectFill, options: requestOptions, resultHandler: {
    13. image, error in
    14. self.imageArray.append(image!)
    15. })
    16. }
    17. } else {
    18. print("You got no photos")
    19. collectionView.reloadData()
    20. }
    21. }
    22. }
    Alles anzeigen
  • Okay scheint tatsächlich so als wenn es das wäre was mein Problem ist...
    Also es hat etwas gedauert aber das ist der Code den ich zusammengekriegt habe. Ich habe zum Test in die viewDidLoad ebenfalls fetchResult geprintet um zu sehen ob sich was ändert und siehe da es scheint zu klappen. So sieht es in meiner Konsole aus wenn ich die App das erste mal öffne:

    Optional(<PHUnauthorizedFetchResult: 0x600003f74640> count=0)
    You got no photos
    HalloOptional(<PHFetchResult: 0x60000205c900> count=6)

    Das Problem ist nur das ich die collectionView nicht geupdatet kriege weshalb ich nach wie vor einen weißen Screen habe obwohl ich wie in der Konsole zu sehen ein fetchResult bekomme...

    Was mache ich falsch ?

    Hier der Code:

    Quellcode

    1. extension ViewController: PHPhotoLibraryChangeObserver {
    2. func photoLibraryDidChange(_ changeInstance: PHChange) {
    3. DispatchQueue.main.sync {
    4. if let changeDetails = changeInstance.changeDetails(for: fetchResult) {
    5. fetchResult = changeDetails.fetchResultAfterChanges
    6. print("Hallo\(fetchResult)")
    7. collectionView.reloadData()
    8. }
    9. }
    10. }
    11. }
    Alles anzeigen


    EDIT: Habe es jetzt hinbekommen, würde eure Meinung dazu aber ganz gerne hören. Irgendwie kommt mir das etwas doppelt gemoppelt vor da ich es ja schon ähnlich in der grabPhotos() Funktion mache....


    Quellcode

    1. extension ViewController: PHPhotoLibraryChangeObserver {
    2. /// - Tag: RespondToChanges
    3. func photoLibraryDidChange(_ changeInstance: PHChange) {
    4. // Change notifications may originate from a background queue.
    5. // Re-dispatch to the main queue before acting on the change,
    6. // so you can update the UI.
    7. DispatchQueue.main.sync {
    8. // Check each of the three top-level fetches for changes.
    9. if let changeDetails = changeInstance.changeDetails(for: fetchResult) {
    10. // Update the cached fetch result.
    11. fetchResult = changeDetails.fetchResultAfterChanges
    12. let imgManager = PHImageManager.default()
    13. let requestOptions = PHImageRequestOptions()
    14. requestOptions.isSynchronous = true
    15. requestOptions.deliveryMode = .highQualityFormat
    16. if fetchResult.count > 0 {
    17. for i in 0..<fetchResult.count {
    18. imgManager.requestImage(for: fetchResult.object(at: i) , targetSize: CGSize(width: 200, height: 200), contentMode: .aspectFill, options: requestOptions, resultHandler: {
    19. image, error in
    20. self.imageArray.append(image!)
    21. self.collectionView.reloadData()
    22. })
    23. }
    24. } else {
    25. print("You got no photos")
    26. collectionView.reloadData()
    27. }
    28. // Don't update the table row that always reads "All Photos."
    29. }
    30. }
    31. }
    32. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ThisIsBeat ()