FMDB插入数据提示Unknown error calling sqlite3_step (8: attempt to write a readonly

在项目的开发过程中,必然会做数据的持久化,而在iOS的开发中,存储大量数据很多人使用的是SQLite,我也是其中的一个,在项目中使用的数据库相关的第三方框架是FMDB。

前几天做项目的时候,为了偷懒,不想使用代码在项目中动态创建数据库文件和数据表,就使用可视化工具创建了一个数据库文件,直接拖进项目中,然后获取路径,使用FMDB进行操作,由于开发前期是没有使用真机进行开发的(我想,很少有人会在电脑上插个iPhone一直用来调试的吧),所以,一切进展在模拟器上都显得那么和谐、那么顺利。

临近结束的时候,使用真机测试一下,瞬间问题出现了,在向数据库中写入数据的时候,控制台一直提示: Unknown error calling sqlite3_step (8: attempt to write a readonly)

这个提示语一看就知道,这个数据库文件是一个只读的,不能执行写入操作,好吧,我改。打开项目所在的目录,找到数据库文件,设置文件的访问权限,重新运行,报错。

难道是缓存,好的,卸载手机上的APP,重新运行安装,再次报错。

打开模拟器,卸载模拟器上的APP,重新安装,运行,很正常。

怎么回事?手机上不能运行,模拟器上可以,难道不是数据库文件没有读写权限,而是数据库文件所处的位置没有读写权限?好吧,我用代码动态创建试试,结果表明,成功了,顺利运行。

经过这次事情,我突然明悟了,拖进项目中的资源是会被放在一个资源文件夹中,这个资源文件夹是只读的,也就导致了放在里面的所有文件都无法进行写入操作。所以啊,想要对资源进行读写操作,还是将需要进行读写操作的文件放到系统分配的沙盒目录下,如果实在是想使用拖进去的资源文件进行读写操作,可以先将资源文件拖进项目中,在APP运行时将资源文件复制到沙盒中进行操作。

开发中遇到的每一个错误都是一中收获,收获的可能不止这个错误的解决方案,还有其他的相关知识,每次解决错误都是一次进步,如果解决错误还没法让自己进步,放弃吧,这不是适合你的行业。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,812评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,049评论 19 139
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,667评论 8 265
  • 人都有古稀、耄耋之年,但未到那一年月,又怎能理解那是一种怎样的状态。过了孩童时代,却又未到老年之时,看着家里的孩...
    持己所好阅读 197评论 0 1
  • 我的男孩: 我在BJ,这是北京时间2014年2月25号晚上十点,在昏黄的灯光前看着地图。 我与你相差12小...
    嗨_暄清阅读 390评论 2 4