開發環境: macOS 10.12.1 Xcode 8.1 Qt 5.8 iPhone 6S+iOS 10.1.1 源代碼: 我在 Qt 程式里指定了資料庫的名稱來創建資料庫,在 Win10、Android、macOS 下正常運行,但是在蘋果手機上報錯。 QSqlDatabase db; db.se ...
開發環境:
macOS 10.12.1 Xcode 8.1 Qt 5.8 iPhone 6S+iOS 10.1.1 源代碼: 我在 Qt 程式里指定了資料庫的名稱來創建資料庫,在 Win10、Android、macOS 下正常運行,但是在蘋果手機上報錯。 QSqlDatabase db; db.setDatabaseName("farmer.db"); // 創建資料庫 問題: 在模擬器上可以正常訪問 SQLite 資料庫,但是在真機上不行,提示如下錯誤: QSqlDatabasePrivate::database: unable to open database: "out of memory Error opening database" 解決方法: 1、因為我對蘋果的開發環境一無所知,只能使用百度大法,初步確認是訪問許可權的問題,我從這裡瞭解了 iOS 的沙盒目錄結構:http://blog.csdn.net/iunion/article/details/46889073 於是我修改了下代碼,直接在 Documents 目錄生成資料庫文件,還是出錯。 db.setDatabaseName("../Documents/farmer.db"); // 創建資料庫
2、繼續百度出來的建議是把已經生成好的資料庫文件直接部署到應用程式中,然後用代碼拷貝到 Documents 目錄下。
於是 Qt 編譯完之後,我用 Xcode 打開項目,把資料庫文件 farmer.db 加到 Resources 中,

#ifdef Q_OS_IOS
qDebug("操作系統:iOS");
destFile = QDir::homePath() + "/Documents/farmer.db";
#else
qDebug("操作系統:非 iOS");
#endif 解決這個問題,花費了我1天半的時間。記錄一下,堅持每天進步一點點。