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