Question

I can send a .csv file as an attachment from my app, but I'd like to shorten the name file for that attachment, because there will be a pile of csv files delivered to the recipient.

Piece of code:

...      
if (dorsalesPorTramoYcontrol && dorsalesPorTramoYcontrol.count )
                {
                    NSMutableString *mainString = [[ NSMutableString alloc]initWithString:@"dorsal,paso,tiempo\n"];

                    for (NSManagedObject *get in dorsalesPorTramoYcontrol) {

                         //dorsales
                        NSString *string =[get valueForKey:@"dorsal"];
                        [mainString appendFormat:@"%@,",string];

                        //paso
                        string = [get valueForKey:@"paso"];
                        string=[string stringByReplacingOccurrencesOfString:@"\"" withString:@"\"\""];
                        [mainString appendFormat:@"%@,",string];

                        //tiempo
                        string = [get valueForKey:@"tiempo"];
                        string=[string stringByReplacingOccurrencesOfString:@"\"" withString:@"\"\""];
                        [mainString appendFormat:@"%@",string];

                                [mainString appendFormat:@"\n"];
                        }

                    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                    NSString *documentsDirectoryPath = [paths objectAtIndex:0];

file = [NSString stringWithFormat:@"%@/Tramo%@Control%@.csv", documentsDirectoryPath,section,control];

                    NSError *csVerror= NULL;
                    BOOL written = [mainString writeToFile:file atomically:YES encoding:NSUTF8StringEncoding error:&csVerror];
                    if (!written)  {
                        NSLog( @"Writing failed, error = %@",csVerror);
                    }else {
                        NSLog(@"Data saved! File path = %@",file);
                        [self composeEmail];
                    }
                }
    }

    -(void)composeEmail{

        if ([MFMailComposeViewController canSendMail])
        {

            MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];
            mailer.mailComposeDelegate = self;
            [mailer setSubject:[NSString   stringWithFormat:@"Resultados Tramo: %@ - Control: %@", section, control]];
            NSArray *toRecipients = [NSArray arrayWithObjects:@"somebodymail@mail.com", nil];
            [mailer setToRecipients:toRecipients];

            // Logo
            UIImage *myImage = [UIImage imageNamed:@"logo.png"];
            NSData *imageData = UIImagePNGRepresentation(myImage);
            [mailer addAttachmentData:imageData mimeType:@"image/png" fileName:@"Icon"];


            [mailer addAttachmentData:[NSData dataWithContentsOfFile:file] mimeType:@"text/csv" fileName:file];
            NSString *emailBody =
            [NSString   stringWithFormat:@"Resultados Tramo: %@ - Control: %@ \nDorsal - Paso - Tiempo", section, control];
            [mailer setMessageBody:emailBody isHTML:NO];
            mailer.modalPresentationStyle = UIModalPresentationPageSheet;
            [self presentViewController:mailer animated:YES completion:nil];
        }
        else
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Failure"
                                                            message:@"Your device doesn't support the composer sheet"
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles: nil];
            [alert show];
        }
    }

The filename is the following:

<_var_mobile_Applications_BE8CE610-A83E-4C79-8B9C-0263FA6881D6_Documents_Tramo2Control4.csv>

and I'd like it to be just "Tramo2Control4.csv"

Could you please offer some suggestions to get it?

Was it helpful?

Solution

Change the following line:

[mailer addAttachmentData:[NSData dataWithContentsOfFile:file] mimeType:@"text/csv" fileName:file];

To:

NSString *fileName = [file lastPathComponent];
[mailer addAttachmentData:[NSData dataWithContentsOfFile:file] mimeType:@"text/csv" fileName:fileName];

You were originally setting the file name to be the entire file path.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top