将CSV文件附加到电子邮件目标-C时出现问题

问题描述:

我正在使用以下IBAction将包含一些简单收据数据的CSV文件附加到电子邮件中,但是当打开电子邮件编辑器视图时,主体部分中会出现一个灰色文件,而当我实际发送消息,消息完全不带附件发送.

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.

这里是我的代码:

    - (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输出:

csvString outputs :

日期,业务,类别,付款人,注释,数字,货币,金额"2012年7月17日","tho",类别1",支票",午餐","726269","GBP" ,"100.00"

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?

谢谢

杰克

尝试此代码

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