/ / PHAssetResource.assetResources (for: asset) .first.OriginalFilename gibt nach 300 Assets null zurück - ios, swift, xcode, phasset

PHAssetResource.assetResources (für: asset) .first.OriginalFilename gibt null nach 300 Assets - ios, swift, xcode, phasset

extension PHAsset {

var originalFilename: String? {

var fname:String?

let resources = PHAssetResource.assetResources(for: self)
if let resource = resources.first {
fname = resource.originalFilename
}
return fname
}
}

Ich benutze diese Erweiterung von PHAsset, um dieUrsprünglicher Dateiname des Assets. Es gibt ungefähr 2000 Assets, diese Erweiterung gibt den ursprünglichen Dateinamen der ersten 300 Assets an und gibt dann Null zurück. Ich bin verwirrt, wie es möglich ist? Gibt es einen Fehler in Xcode? Ich verwende jedoch Xcode 8.1 und swift 3.0. Kann mir jemand helfen, dieses Problem zu lösen? Danke im Voraus.

Antworten:

0 für die Antwort № 1

Das sieht nach einem Fehler aus, den ich einmal hatte: PHAsset assetResourcesForAsset schlägt fehl, wenn zu oft aufgerufen wird

Es stellte sich als ein Problem mit der Speicherverwaltung heraus. Irgendwann war der freie RAM-Speicher des Geräts sehr niedrig, und das war der Zeitpunkt, zu dem das Gerät zurückkehrte nil. Indem Sie die umgebende Operation in eine autorelease Block (wo ich das geladen habe PHAsset) ging das Problem weg.

Ich habe immer noch einige seltene Fälle, in denen der ursprüngliche Dateiname vorhanden ist nil (oder das Asset hat keine Ressource, ich weiß es nicht wirklich), aber dies könnte möglicherweise von einem Fehler im Asset stammen.


0 für die Antwort № 2

Es scheint, als ob das Original-Dateiname fehltdie iOS-Fotobibliothek für einige Ihrer Assets. Dies kann verschiedene Ursachen haben (Bug, bestimmte Assets wurden von iCloud wiederhergestellt). Sie sollten diesen Fall in Ihrem Code behandeln und z. Erzeugen Sie einen eigenen Dateinamen (z. B. einen UUID-basierten), wenn originalFilename fehlt