2015-02-19 1 views
0

Я пытаюсь отправить 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

Может быть дубликатом, пожалуйста, проверьте: - http://stackoverflow.com/questions/24477072/unable-to-attatch -a-csv-file-to-mail-in-objective-c http://stackoverflow.com/questions/11524548/issue-attaching-csv-file-to-e-mail-objective-c –

ответ

2

NSStringEncodingConversionAllowLossy не является допустимым строковым кодированием.
Вы в основном используете NSASCIIStringEncoding, потому что используете неправильное перечисление. Поэтому, если ваша строка не является строгой ASCII, она не может быть преобразована в NSData и не будет записана на диск.

Начать проверку, может ли файл быть записан на диск. т.е.

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

Edit: И вы не добавить строки 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]]; 
} 
+0

Только что заметил это я и писал об этом. Стыдно! – Scott