Найдены пустые данные в sqlite при отправке через MFMailcomposeController - PullRequest
0 голосов
/ 15 мая 2019

Я отправляю SQLite (файл Coredata sqlite) по электронной почте, но во всех таблицах полученной почты обнаружены пустые данные.

Я использую следующий код:

MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
mc.mailComposeDelegate = self;
[mc setSubject:subject];
[mc setMessageBody:body isHTML:FALSE];
if (attachmentData) {
 [mc addAttachmentData:attachmentData mimeType:fileMimeType fileName:fileName];
}
if (!recipients || recipients.count == 0) {
 recipients = @[];
}
[mc setToRecipients:recipients];
[presentedViewController presentViewController:mc animated:YES completion:nil];

Здесь fileMimeType = "application / x-sqlite3" и fileName: xyz.sqlite

Нашел тот же вопрос здесь, но без решения.Есть идеи, как это сделать?

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Как я указывал в комментариях, iOS по умолчанию использует режим WAL в SQLite, поэтому вам необходимо включить файл WAL в качестве вложения.

0 голосов
/ 15 мая 2019
  • Вы уверены, что прикрепленные данные не равны нулю?
  • Насколько велики данные вложения?
  • Как вы строите свои данные из файла sqlite?

Мне показалось, что этот тестовый код отлично работает при отправке простого примера базы данных:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self sendSampleMailWithDbAttached];
}

- (void)sendSampleMailWithDbAttached {
    MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
    mc.mailComposeDelegate = self;
    [mc setSubject:@"Message Subject"];
    [mc setMessageBody:@"Message Body" isHTML:NO];
    NSString *sqliteFilePath = [self createTestDb];
    NSData *attachmentData = [NSData dataWithContentsOfFile:sqliteFilePath];
    if (attachmentData) {
        [mc addAttachmentData:attachmentData mimeType:@"application/x-sqlite3" fileName:@"xyz.sqlite"];
    }
    [mc setToRecipients:@[@"fake@email.com"]];
    [self presentViewController:mc animated:YES completion:nil];
}

- (NSString *)createTestDb {
    NSString *databasePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
                              stringByAppendingPathComponent: @"xyz.sqlite"];
    sqlite3 *db;
    if (sqlite3_open([databasePath UTF8String], &db) == SQLITE_OK) {
        NSString *query = @"CREATE TABLE IF NOT EXISTS test(abc TEXT, def TEXT);";
        if (sqlite3_exec(db, [query UTF8String], NULL, NULL, NULL) == SQLITE_OK) {
            query = @"INSERT INTO test(abc, def) VALUES('ABC', '123');";
        }
        sqlite3_close(db);
    }
    return databasePath;
}
...