1

Ich versuche, die Größe einer Mail zu berechnen, die über MFMailComposeViewController erstellt wird. Der Benutzer wählt einige Titel aus einem UITableView aus, und meine App ruft entsprechende PDF-Dateien von einem Server ab und hängt sie an eine neue Mail an.Größe des E-Mail-Anhangs in iOS berechnen

Ich versuche jetzt, die Anlage Größe zu berechnen (um es zu zeigen oder einige Einschränkungen oder was auch immer).

for(int i = 0; i < fileIDs.count; i++) { 
    NSURL *docUrl = [NSURL URLWithString:[NSString stringWithFormat: 
              @"http://domain.com/getPDF.php?fileID=%@", 
              [fileIDs objectAtIndex:i]]]; 

    NSData *docData = [NSData dataWithContentsOfURL:docUrl]; 

    [mailController addAttachmentData:docData 
        mimeType:@"application/pdf" 
        fileName:@"file.pdf"]; 

    mailLength = mailLength + [docData length]; 

    NSLog(@"Mail generation...\n%i of %i (%.2fMB)", 
      i+1, currentRows.count, ((float)(int)mailLength/1048576)); 
} 

Ich bekomme eine Ausgabe obwohl. Aber es ist viel zu groß. Die berechnete Dateigröße ist zum Beispiel 5,14 MB aber die tatsächliche Größe ist nur 1,2 MB.

Was mache ich falsch?

+0

was ist die rohe Größe, bevor Sie es in int konvertieren, lange und teilen Sie es? auch was ist "mainLength"? – chikuba

+0

'[NSData length]' ergibt einen NSInteger. Also mailLength ist NSInteger. Ich habe mein Beispiel von oben verloren. Also hier ist eine neue: Ergebnis von 25 angehängten Dateien ** Raw: ** _10388976_, ** Berechnet: ** _9.91MB_, ** Actual: ** _2.4MB_ –

+0

ich mehr ment mögen, welche Zahl hält es? setzt du es am Anfang auf 0? ergibt Ihr Ergebnis immer 9.91mb oder variiert es? – chikuba

Antwort

2

Ich habe es behoben.

Anstatt NSInteger zu verwenden, musste ich nur einen Float verwenden. Es funktioniert jetzt:

// header: 
float mailLength; 

// implementation: 
mailLength = mailLength + [docData length]; 
NSLog(@"Mail generation...\n%i of %i (%.2fMB)", i+1, currentRows.count, (mailLength/1048576)); 
+0

gut :) yeah, nicht sicher, was du da machst mit dem (int) (float) vor division. Schön, dass es funktioniert! – chikuba