2012-12-10 13 views
31

Próbuję NSLog liczbę mega mój NSData obiekt jest jednak obecnie wszystko, co mogę dostać jest bajtów za pomocąprzekonwertować NSData długość od bajtów mega

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

więc jak bym tak zmienić tę NSLog oświadczenie ja można zobaczyć coś takiego

2,00 mega

Każda pomoc będzie mile widziane.

+0

W jaki sposób sformatować, aby pojawił się z dwoma miejscami po przecinku. – HurkNburkS

Odpowiedz

111

Istnieje 1024 bajty w kilobajtów i 1024 kilobajtów w megabajt, więc ...

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

Pamiętaj, że jest to uproszczone podejście, że nie można było właściwie pomieścić na rozmiar bajtów poniżej 1.048.576 bajtów lub powyżej 1,073,741,823 bajtów. Dla bardziej kompletnego rozwiązania, które mogą obsługiwać różne formaty plików, patrz: ObjC/Cocoa class for converting size to human-readable string?

Or dla OS X 10.8+ i iOS 6+

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

w Swift:

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

Fajnie, dziękuję grupie, która działała. Byłem zdezorientowany myśląc, że muszę mieć nawiasy itp., Ale to działało idealnie! :) – HurkNburkS

+1

Jeśli chcesz pokazać to użytkownikowi, nie używaj formatu smyczkowego. Zamiast tego użyj NSNumberFormatter. Spowoduje to sformatowanie ustawień regionalnych użytkownika. – rmaddy

+0

szybkie i ręczne. to było pomocne – Alix

13

dla Swift 3, w Mb:

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

print("File size: \(fileSize)") 
Powiązane problemy