电子邮件附件没有内容

时间:2015-02-19 08:25:51

标签: ios email csv mfmailcomposeviewcontroller

我试图在我的应用中通过电子邮件发送用户数据的CSV副本,我尝试了几种不同的方法。它在邮件程序视图控制器中显示为" Backup.csv"但是当我收到电子邮件时,收到电子邮件时没有内容。可能导致这种情况的原因是什么?

-(void)backupDatabase {
    NSString *CSVstring = [NSString string];
    for (SELVendor *vendor in [[SELVendorStore store] allVendors]) {
        [CSVstring stringByAppendingString:[NSString stringWithFormat:@"\"vendor\",\"%@\",\"%@\",\"%@\",\"%@\",%i\n",vendor.name, vendor.phone, vendor.email, vendor.vendorID, vendor.placeOrderByEmail]];
    }

    // Create CSV file
    NSArray *directory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *filePath = [directory[0] stringByAppendingPathComponent:@"databaseBackup"];
    NSError *error;
    [CSVstring writeToFile:filePath atomically:false encoding:NSStringEncodingConversionAllowLossy error:&error];
//    [[NSFileManager defaultManager]createFileAtPath:filePath contents:nil attributes:nil];
//    NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:filePath];
//    [fileHandle seekToEndOfFile];
//    [fileHandle writeData:[CSVstring dataUsingEncoding:NSUTF8StringEncoding]];

    // Setup email and attach CSV file
    MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];
    mailer.mailComposeDelegate = self;
    [mailer setSubject:@"Inventory App CSV Backup"];
    [mailer addAttachmentData:[NSData dataWithContentsOfFile:filePath] mimeType:@"text/csv"  fileName:@"Backup.csv"];
    [self presentViewController:mailer animated:true completion:nil];
}

1 个答案:

答案 0 :(得分:2)

NSStringEncodingConversionAllowLossy不是有效的字符串编码 您基本上使用NSASCIIStringEncoding,因为您使用了错误的枚举。因此,如果您的字符串不是严格的ASCII,它就不能转换为NSData,也不会被写入磁盘。

首先检查文件是否可以写入磁盘。即

if (![CSVstring writeToFile:filePath atomically:false encoding:NSUTF8StringEncoding error:&error]) {
    NSLog(@"Could not write file %@", error);
} 
else {
    MFMailComposeViewController ...
}

编辑:并且您不会将CSV行添加到字符串中。所以你将创建一个空字符串。

[CSVstring stringByAppendingString:...];创建一个新字符串。但是你不能将该字符串分配给任何东西。

所以将那部分改为:

NSString *CSVstring = [NSString string];
for (SELVendor *vendor in [[SELVendorStore store] allVendors]) {
    CSVstring = [CSVstring stringByAppendingString:[NSString stringWithFormat:@"\"vendor\",\"%@\",\"%@\",\"%@\",\"%@\",%i\n",vendor.name, vendor.phone, vendor.email, vendor.vendorID, vendor.placeOrderByEmail]];
}

NSMutableString *CSVstring = [NSMutableString string];
for (SELVendor *vendor in [[SELVendorStore store] allVendors]) {
    [CSVstring appendString:[NSString stringWithFormat:@"\"vendor\",\"%@\",\"%@\",\"%@\",\"%@\",%i\n",vendor.name, vendor.phone, vendor.email, vendor.vendorID, vendor.placeOrderByEmail]];
}