2012-12-10 20 views
31

Sto cercando di NSLog il numero di mega mio oggetto NSData è comunque attualmente tutto quello che posso ottenere è byte utilizzandoconvertire NSData Lunghezza da byte mega

NSLog(@"%u", myData.length); 

Così come vorrei cambiare questo NSLog affermazione così ho può vedere qualcosa di simile

2.00 mega

qualsiasi aiuto sarebbe apprezzato.

+0

Come si formattare in modo che venga visualizzato con due cifre decimali. – HurkNburkS

risposta

111

Ci sono 1024 byte in un kilobyte e 1024 kilobyte di un megabyte, quindi ...

NSLog(@"File size is : %.2f MB",(float)myData.length/1024.0f/1024.0f); 

Mente voi, questo è un approccio semplicistico che non poteva davvero adeguatamente ospitare per le dimensioni byte di seguito 1.048.576 byte o superiore a 1.073.741.823 byte. Per una soluzione più completa in grado di gestire file di dimensioni diverse, vedi: ObjC/Cocoa class for converting size to human-readable string?

O per OS X 10.8+ e iOS 6+

NSLog(@"%@", [[NSByteCountFormatter new] stringFromByteCount:data.length]); 

In Swift:

print(ByteCountFormatter().string(fromByteCount: Int64(data.count))) 
+1

Cool, grazie a un gruppo che ha funzionato .. Mi stavo confondendo pensando di dover avere parentesi ecc. Ma questo ha funzionato perfettamente! :) – HurkNburkS

+1

Se è necessario mostrare questo all'utente, non utilizzare un formato stringa. Invece, utilizzare NSNumberFormatter. Questo formatterà per le impostazioni locali dell'utente. – rmaddy

+0

rapido e manuale. è stato utile – Alix

13

Per Swift 3, in Mb:

let countBytes = ByteCountFormatter() 
countBytes.allowedUnits = [.useMB] 
countBytes.countStyle = .file 
let fileSize = countBytes.string(fromByteCount: Int64(dataToMeasure!.count)) 

print("File size: \(fileSize)")