2017-07-14 2 views
1

Y at-il un moyen d'obtenir la taille de fichier sur le disque d'un PHAsset sans faire requestImageDataForAsset ou en le convertissant en ALAsset? Je charge des aperçus de la photothèque d'un utilisateur - potentiellement plusieurs milliers d'entre eux - et il est impératif pour mon application qu'ils connaissent la taille avant l'importation.Obtenir la taille du fichier PHAsset sans charger dans la ressource?

Répondre

6

Vous pouvez saisir le fileSize d'un PHAsset et le convertir en une forme lisible par l'homme comme celui-ci:

 let resources = PHAssetResource.assetResources(for: yourAsset) // your PHAsset 

     var sizeOnDisk: Int64? = 0 

     if let resource = resources.first { 
     let unsignedInt64 = resource.value(forKey: "fileSize") as? CLong 
     sizeOnDisk = Int64(bitPattern: UInt64(unsignedInt64!)) 
     } 

Ensuite, utilisez votre variable sizeOnDisk et passer dans une méthode comme ça ...

func converByteToHumanReadable(_ bytes:Int64) -> String { 
    let formatter:ByteCountFormatter = ByteCountFormatter() 
    formatter.countStyle = .binary 

    return formatter.string(fromByteCount: Int64(bytes)) 
} 
+0

C'est vraiment une solution géniale! Mais n'a trouvé cela dans aucun document. Apple approuvera-t-il cela?!? – Erfan

+1

Il ne figure dans aucune documentation car il accède aux fichiers d'en-tête. Techniquement, c'est une petite partie des API privées d'Apple. Cependant, nous avons soumis un build et reçu l'approbation complète sans problème. – daulSwift

+0

D'accord, merci pour la réponse rapide! :) – Erfan