2012-09-28 50 views
0

在我目前的應用程序中,我添加了數據備份和恢復功能。 用戶可以創建數據庫備份併發送電子郵件。 在恢復功能用戶可以從電子郵件導入數據庫,並可以取代當前。如何從自己的iPhone應用程序的電子郵件sqlite數據庫?

我能夠創建備份和恢復數據庫文件。 在還原中,我只是將文件從我的電子郵件複製到應用程序文檔替換當前文件。 問題是,在我的數據庫備份代碼中,sqlite數據庫被轉換爲NSData。我不想被轉換,需要通過電子郵件發送確切的sqlite文件。

這裏是我目前使用的電子郵件SQLite數據庫

-(void)backUpData 
{ 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSString *txtPath = [documentsDirectory stringByAppendingPathComponent:@"/DemoApp.sqlite"]; 

NSURL *newUrl = [[NSURL alloc] initWithString: 
[txtPath stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]]; 

NSData *sqliteData = [[NSData alloc] initWithContentsOfURL:newUrl]; 

//send sqliteData to email composer delegate to attach it as attachment 
[self showPicker:sqliteData]; 

} 

我如何可以通過電子郵件的SQLite數據庫,而不將其轉換爲NSData的代碼?

回答

2

創建NSData對象時使用dataWithContentsOfFile給出路徑而不是url。例如:

NSString *dbPath = [[NSBundle mainBundle] pathForResource:@"Pubs" ofType:@"db"]; 
NSData *myData = [NSData dataWithContentsOfFile:dbPath]; 


[mailComposeVC addAttachmentData:myData mimeType:@"application/x-sqlite3" fileName:@"Pubs.db"]; 
+0

我用這個,但是這總是使文件具有相同的大小,即使我添加了很多數據到我的sqlite數據庫。 –

+0

在設備上,無法寫入包中的文件,因此您確定數據已添加到數據庫中嗎?一旦收到電子郵件,保存附加文件,並在終端會話中運行sqlite3以查找新記錄。 – SPA

+0

你可以附加sqlite文件,但你永遠無法打開它,例如,通過MAC上的LiYa應用程序 – ikzjfr0

相關問題