邮件附件没有内容

Email attachment has no content

我正在尝试通过电子邮件发送应用程序中用户数据的 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];
}

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]];
}