Swift:无法导出数据库

时间:2018-12-19 14:15:16

标签: swift sqlite cocos2d-iphone

我正在尝试导出数据库。 我已经尝试通过电子邮件进行共享。

问题是我想导出数据库的当前状态(其中包含所有信息)。

我已经尝试过此代码:

func exportDatabase(){
    var url:String = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! as String
    url = url + "/WalletDatabase.sqlite"

    let fileManager = FileManager.default
    if fileManager.fileExists(atPath: url) {
        sendMail(sUrl: url)
    }else{
        print("error")
    }
}

func sendMail(sUrl:String){
    if( MFMailComposeViewController.canSendMail() ) {
        print("Can send email.")

        let fileManager = FileManager.default
        let mailComposer = MFMailComposeViewController()
        mailComposer.setToRecipients(["***@gmail.com"])
        mailComposer.mailComposeDelegate = self

        //Set the subject and message of the email
        mailComposer.setSubject("Lorem Ipsum")
        mailComposer.setMessageBody("Lorem Ipsum.", isHTML: false)

        if let fileData = NSData(contentsOfFile: sUrl) {
            print("File data loaded.")
            mailComposer.addAttachmentData(fileData as Data, mimeType: "application/x-sqlite3", fileName: "WalletDatabase")
        }
        let fileData = fileManager.contents(atPath: sUrl)             
    } else {
        print("error")
    }

但是:

  • 文件发送没有任何类型
  • 数据库为空,仅保留表和col

你们能给我一点帮助吗

1 个答案:

答案 0 :(得分:0)

我通过添加以下代码来修复它:

    static func migrateStoreSwift() -> NSURL
{
    let lApp:AppController = UIApplication.shared.delegate as! AppController;
    let lCurrentStore:NSPersistentStore = lApp.persistentStoreCoordinator.persistentStores.last!
    let lNewDataBase = "Database.sqlite"
    let lNewStoreURL:NSURL = lApp.applicationDocumentsDirectory()?.appendingPathComponent(lNewDataBase) as! NSURL
    try! lApp.persistentStoreCoordinator.migratePersistentStore(lCurrentStore, to: lNewStoreURL as URL, options: nil, withType: NSSQLiteStoreType)
    return lNewStoreURL
}

此代码创建数据库当前版本的副本。