• Qt5 开发 iOS 应用之访问 SQLite 数据库


    开发环境:

    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 中,
    这样部署到真机上之后,确实有 farmer.db 文件了,我使用 QDir::currentPath() 获取应用的路径,然后
     
    QStringdestFile=QDir::currentPath()+"/Documents/farmer.db";
    QFile::copy("farmer.db", destFile);
    复制文件时报错,又换了 QCoreApplication::applicationDirPath() 获取应用的路径,也不行。这两个函数获取的路径是一样的。这个路径不是我需要的路径。
    3、终于找到了合适的方法,应该使用 QDir::homePath() ,参考了:http://www.qtcn.org/bbs/read-htm-tid-60506-fpage-2.html
    这样程序就顺利的运行起来了。
    4、是不是也可以在  Documents 目录下直接生成数据库文件呢?试验了一下,是可以的,这样就不用再打包数据库和拷贝文件了。
    5、另外,再善后一下,为了让程序跨平台,对不同的操作系统分别处理,iOS 系统中,数据库文件放到 Documents 目录,其他系统直接放到程序目录下。
         QString destFile = "farmer.db";
    #ifdef Q_OS_IOS
        qDebug("操作系统:iOS");
        destFile = QDir::homePath() + "/Documents/farmer.db";
    #else
        qDebug("操作系统:非 iOS");
    #endif 
     
    解决这个问题,花费了我1天半的时间。记录一下,坚持每天进步一点点。





  • 相关阅读:
    如何退出天擎
    git彻底删除或变更子模块
    湖北校园网PC端拨号算法逆向
    PPPoE中间人拦截以及校园网突破漫谈
    vscode打开django项目pylint提示has not "object" member
    从客户端取到浏览器返回的oauth凭证
    教程视频如何压制体积更小
    windows中的软链接硬链接等
    关于博客园和独立博客的一些打算
    拉勾抓职位简单小爬虫
  • 原文地址:https://www.cnblogs.com/sdsunjing/p/6074890.html
Copyright © 2020-2023  润新知