2016-05-25 8 views
0

Ich habe ernsthafte Probleme während der Konvertierung. Die erste Lösung, die ich versuchte, ist der Code unten ::Konvertierung der Dateigröße in die entsprechende Form zeigt seltsame Ausgabe

NSByteCountFormatter *formatter = [[NSByteCountFormatter alloc] init]; 
    formatter.allowsNonnumericFormatting = NO; 

    return [NSByteCountFormatter stringFromByteCount:valueFromAPI countStyle:NSByteCountFormatterCountStyleMemory]; 

Die zweite Lösung, die ich versuchte, der unter Code ::

double convertedValue = (double)valueFromAPI; 
DebugLog(@"%f",convertedValue); 

int multiplyFactor = 0; 

NSArray *tokens = @[@"bytes",@"KB",@"MB",@"GB",@"TB",@"PB",@"EB",@"ZB",@"YB"]; 

while (convertedValue >= 1024) { 
    convertedValue /= 1024; 
    multiplyFactor++; 
} 
return [NSString stringWithFormat:@"%4.0f %@",convertedValue, tokens[multiplyFactor]]; 

Aber beide gibt den gleichen seltsamen Ausgang. Nach der Überprüfung auf viele Fälle habe ich festgestellt, dass es nur passiert, wenn die Dateigröße klein ist.

Das Bild zeigt das Problem:
enter image description here

Das Bild zeigt deutlich, dass die zurückgegebenen Dateigrößen in negativ sind und in exobyte (EB), die eigentlich nur Bilder von UIImagePickerController gepflückt. In der zweiten Lösung fand ich heraus, dass beim Konvertieren von long long zu double 'es in das erweiterte Format konvertiert wird, was das Problem verursacht.

Ich weiß nicht, wie ich es lösen soll. Bitte hilf mir. Danke im Voraus.

+0

Was ist der tatsächliche Wert? – trojanfoe

+0

@trojanfoe Die Werte, die von der API kommen 1024.00, 15394.00, 482317.00, 36200.00 und sie sind in Form von NSString –

Antwort

0
- (NSString*)transformedValue:(double) valueFromAPI 
{ 
     NSByteCountFormatter *formatter = [[NSByteCountFormatter alloc] init]; 
     formatter.allowsNonnumericFormatting = NO; 
     return [NSByteCountFormatter valueFromAPI countStyle:NSByteCountFormatterCountStyleMemory]; 
} 

ich die valueFromAPI wurde die Umstellung auf 'long long' und dann auf 'doppelte', das Problem geschaffen. Also habe ich den NSString in Double konvertiert und direkt übergeben. Jetzt werden meine Dateigrößen korrekt angezeigt.

Vielen Dank an alle für Ihre Vorschläge.

+1

Also war das nicht meine Antwort? – trojanfoe

0

Versuchen Sie this Methode.

Verbrauch:

#import "FileSize.h" 

... 

unsigned long long fileSize = ...; 
NSString *compressedFilesSize = [FileSize convertSize:fileSize];  
NSLog(@"File size : %@", compressedFilesSize); 
+0

Danke @Liolik für den Vorschlag, aber es hilft nicht. –

0

mit Ihnen von Gesprächen über Kommentare, die Sie festgestellt haben, dass valueFromAPI ein NSString * ist, wobei in diesem Fall das Problem ist, dass Sie die Adresse der Zeichenfolge konvertieren, nicht der Wert es enthält:

double convertedValue = (double)valueFromAPI; 

Sie wollen:

double convertedValue = [valueFromAPI doubleValue]; 
+0

Wenn Sie versuchen, werden Sie feststellen, dass beide die gleiche Ausgabe anzeigen. –

+1

@SushreeSwagatika Sie sagen, dass beide Zeilen in meinem Code dasselbe tun? – trojanfoe

+0

Danke @trojanfoe. Ihre Antwort klickte die Lösung in meinem Kopf ... :-) –