I'm using the following IBAction to attach a CSV file consisting of some simple receipt data to an e-mail, however when the e-mail composer view opens, a greyed out file appears in the body section and when I actually send the message the message sends with no attachment at all.
Heres my code:
- (IBAction)actionEmailComposer {
NSLog(@"Receipts Count: %d", [receipts count]);
//Create CSV File
NSMutableString *csvString = [[NSMutableString alloc] init];
[csvString appendString:@"Date,Business,Category,Paid By,Note, Number,Currency, Amount"];
for (int i = 0; i < [receipts count]; i++){
[csvString appendString: [[receipts objectAtIndex:i] receiptDate]];
[csvString appendString: [[receipts objectAtIndex:i] business]];
[csvString appendString: [[receipts objectAtIndex:i] category]];
[csvString appendString: [[receipts objectAtIndex:i] paidBy]];
[csvString appendString: [[receipts objectAtIndex:i] note]];
[csvString appendString: [[receipts objectAtIndex:i] number]];
[csvString appendString: [[receipts objectAtIndex:i] currency]];
[csvString appendString: [[receipts objectAtIndex:i] amount]];
}
[csvString writeToFile:@"test.csv" atomically:YES encoding:NSUTF8StringEncoding error:NULL];
if ([MFMailComposeViewController canSendMail]) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// NSString *recipient = [defaults objectForKey:@"reportsEmail"];
NSString *recipient = @"[email protected]";
NSArray *recipients = [NSArray arrayWithObjects:recipient, nil];
MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
mailViewController.mailComposeDelegate = self;
[mailViewController setSubject:@"CSV Export"];
[mailViewController setToRecipients:recipients];
[mailViewController setMessageBody:@"" isHTML:NO];
mailViewController.navigationBar.tintColor = [UIColor blackColor];
NSData *myData = [NSData dataWithContentsOfFile:@"test.csv"];
[mailViewController addAttachmentData:myData
mimeType:@"text/csv"
fileName:@"test"];
[self presentModalViewController:mailViewController animated:YES];
}
//Display alert to the user
else {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Can't Send Mail"
message:@"Device is unable to send email in its current state."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
}
csvString outputs :
Date,Business,Category,Paid By,Note, Number,Currency, Amount"July 17, 2012","tho","Category 1","Cheque","lunch","726269","GBP","100.00"
So there is existing data, it just doesn't seem to attach properly, can anyone explain whats going on here?
Thanks,
Jack
Try this code
arr_email=[[NSMutableArray alloc] initWithArray:[objDatabase lookupAllForSQL:@"select * from password"]];
NSString *mystr=@"";
NSString *str_type;
NSString *str_name;
NSString *str_user;
NSString *str_pwd;
NSString *str_url;
NSString *str_descr;
NSString *csvstr;
csvstr=[NSString stringWithFormat:@"Account Type,Account Name,UserName/Card No,Password/Pin No, URL/Other Info,Description"];
for (int i=0; i<[arr_email count]; i++) {
NSMutableDictionary *dict = [arr_email objectAtIndex:i];
str_type=[NSString stringWithFormat:@"%@",[dict objectForKey:@"AccountType"]];
str_name=[NSString stringWithFormat:@"%@",[dict objectForKey:@"AccountName"]];
str_user=[NSString stringWithFormat:@"%@",[dict objectForKey:@"UserName"]];
str_pwd=[NSString stringWithFormat:@"%@",[dict objectForKey:@"Password"]];
str_url=[NSString stringWithFormat:@"%@",[dict objectForKey:@"Url"]];
str_descr=[NSString stringWithFormat:@"%@",[dict objectForKey:@"Description"]];
mystr=[NSString stringWithFormat:@"%@ \n %@,%@,%@,%@,%@,%@",mystr,str_type,str_name,str_user,str_pwd,str_url,str_descr];
}
csvstr=[NSString stringWithFormat:@"%@ \n %@",csvstr,mystr];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *filename = [docDir stringByAppendingPathComponent:[NSString stringWithFormat:@"My Private Closet.csv"]];
NSError *error = NULL;
BOOL written = [csvstr writeToFile:filename atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (!written)
NSLog(@"write failed, error=%@", error);