将附件CSV文件附加到电子邮件目标 – C

我正在使用以下IBAction将包含一些简单收据数据的CSV文件附加到电子邮件中,但是,当电子邮件编辑器视图打开时,会在正文部分显示灰色文件,并且当我实际发送邮件该消息根本没有附件发送。

下面是我的代码:

- (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 = @"testemail@live.com"; 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输出:

date,业务,类别,支付方式,注意,数量,货币,金额“2012年7月17日”,“tho”,“Category 1”,“Check”,“lunch”,“726269”,“GBP”,“ “

所以有现有的数据,它似乎没有正确的附加,任何人都可以解释这是怎么回事?

谢谢,

插口

试试这个代码

  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); 

这是违反直觉的,但附加文件时的文件名不包括扩展名。 因此,使用名为“test.csv”的文件名称:

 [mailViewController addAttachmentData:myData mimeType:@"text/csv" fileName:@"test"];