it-swarm.com.de

iOS 11: [ImageManager] Bilddaten können nicht geladen werden

Nach dem Update auf iOS 11 werden Foto-Assets jetzt langsam geladen, und in der Konsole wird folgende Meldung angezeigt:

[ImageManager] Bilddaten können nicht geladen werden /var/mobile/Media/DCIM/103Apple/IMG_3064.JPG

Ich benutze die statische Funktion zum Laden des Bildes:

class func getAssetImage(asset: PHAsset, size: CGSize = CGSize.zero) -> UIImage? {
    let manager = PHImageManager.default()
    let option = PHImageRequestOptions()
    option.isSynchronous = true

    var assetImage: UIImage!
    var scaleSize = size
    if size == CGSize.zero {
        scaleSize = CGSize(width: asset.pixelWidth, height: asset.pixelHeight)
    }

    manager.requestImage(for: asset, targetSize: scaleSize, contentMode: .aspectFit, options: option) { (image, nil) in
        if let image = image {
            assetImage = image
        }
    }
    if assetImage == nil {
        manager.requestImageData(for: asset, options: option, resultHandler: { (data, _, orientation, _) in
            if let data = data {
                if let image = UIImage.init(data: data) {
                    assetImage = image
                }
            }
        })
    }
    return assetImage
}

Das Anfordern eines Bildes für ein Asset ist normalerweise immer erfolgreich, es wird jedoch diese Nachricht gedruckt. Wenn ich nur die Funktion requestImageData verwende, wird diese Meldung nicht angezeigt. Die mit der Apple-Kamera erstellten Fotos verlieren jedoch ihre Orientierung und ich bekomme noch mehr Probleme beim Laden einer großen Anzahl von Bildern (ich verwende eine Diashow in meiner App).

Apple nervt immer, wenn es um Updates geht. Vielleicht hat jemand eine Lösung, wie man das beheben kann? Es kann sogar kein Asset geladen werden, wenn sich eine große Liste in der Benutzerkamera befindet. Das Wechseln zu requestImageData ist für mich keine Option, da es jetzt häufig keine Daten bringt.

Ich möchte darauf hinweisen, dass ich diese Funktion nur einmal aufrufe. Es wird nicht in UITableView usw. verwendet. Ich benutze anderen Code für Daumen mit global initialisierten Manager und Optionen, daher sind Assets auf keinen Fall Null oder etc .. Ich rufe diese Funktion nur auf, wenn der Benutzer auf einen bestimmten Daumen klickt. Wenn in der Galerie 5000 Fotos vorhanden sind, ist die Verbindung zu Assets möglicherweise einfach überlastet, und später kann die Anforderung nicht mehr verarbeitet werden und stürzt ab? __. So viele Fragen.

16
Bio-Matic

Hey, ich hatte auch die Warnung und hier ist was für mich funktioniert.

Durch Ersetzen von CGSize(width: asset.pixelWidth, height: asset.pixelHeight) Durch PHImageManagerMaximumSize in requestImage Aufruf Wurde das Warnprotokoll entfernt. ????

Hoffe das hilft,

7
sachadso

Ich hatte das gleiche Problem. Obwohl dies nicht vollständig gelöst wurde, hat es definitiv geholfen.

option.isNetworkAccessAllowed = true

Dies ist nur bei Geräten hilfreich, auf denen die Option iPhone-Speicheroption für Fotos optimieren optimiert wurde.

2
Mitul Jindal

Ihr Code hat einige schwerwiegende Probleme. Sie sagen .isSynchronous = true, ohne in einen Hintergrundthread zu treten, um den Abruf auszuführen. Das ist illegal und verursacht die Langsamkeit. Außerdem fragen Sie nach einer targetSize, ohne auch .resizeMode = .exact zu sagen, was bedeutet, dass Sie viel größere Bilder erhalten, als Sie wünschen.

Die Warnung, die Sie sehen, ist jedoch irrelevant und kann ignoriert werden. Es zeigt keinesfalls einen Fehler bei der Bildlieferung an. Es scheint nur eine interne Nachricht zu sein, die versehentlich an die Konsole gelangt ist.

1
matt

Sie können die Methode "requestImageData" mit den folgenden Optionen ausprobieren. Dies funktionierte für mich in iOS 11.2 (sowohl auf dem Gerät als auch im Simulator). 

let options = PHImageRequestOptions()
options.deliveryMode = .highQualityFormat
options.resizeMode = .exact
options.isSynchronous = true

PHImageManager.default().requestImageData(for: asset, options: options, resultHandler: { (data, dataUTI, orientation, info) in
0
Hitesh

Dies scheint ein Fehler bei iOS 11 zu sein, aber ich konnte feststellen, dass ich die synchrone Option false umgehen konnte. Ich habe meinen Code überarbeitet, um mit der asynchronen Lieferung fertig zu werden. Wahrscheinlich können Sie Sync (Execute :) für eine schnelle Korrektur verwenden.

Ich glaube auch, dass das Problem nur bei Fotos auftrat, die von iCloud geteilt wurden.

0
user1055568