FMDB插入數(shù)據(jù)提示Unknown?error?calling?sqlite3_step?(8:?attempt?to?write?a?readonly

在項目的開發(fā)過程中,必然會做數(shù)據(jù)的持久化,而在iOS的開發(fā)中,存儲大量數(shù)據(jù)很多人使用的是SQLite,我也是其中的一個,在項目中使用的數(shù)據(jù)庫相關(guān)的第三方框架是FMDB。

前幾天做項目的時候,為了偷懶,不想使用代碼在項目中動態(tài)創(chuàng)建數(shù)據(jù)庫文件和數(shù)據(jù)表,就使用可視化工具創(chuàng)建了一個數(shù)據(jù)庫文件,直接拖進(jìn)項目中,然后獲取路徑,使用FMDB進(jìn)行操作,由于開發(fā)前期是沒有使用真機(jī)進(jìn)行開發(fā)的(我想,很少有人會在電腦上插個iPhone一直用來調(diào)試的吧),所以,一切進(jìn)展在模擬器上都顯得那么和諧、那么順利。

臨近結(jié)束的時候,使用真機(jī)測試一下,瞬間問題出現(xiàn)了,在向數(shù)據(jù)庫中寫入數(shù)據(jù)的時候,控制臺一直提示: Unknown?error?calling?sqlite3_step?(8:?attempt?to?write?a?readonly)

這個提示語一看就知道,這個數(shù)據(jù)庫文件是一個只讀的,不能執(zhí)行寫入操作,好吧,我改。打開項目所在的目錄,找到數(shù)據(jù)庫文件,設(shè)置文件的訪問權(quán)限,重新運行,報錯。

難道是緩存,好的,卸載手機(jī)上的APP,重新運行安裝,再次報錯。

打開模擬器,卸載模擬器上的APP,重新安裝,運行,很正常。

怎么回事?手機(jī)上不能運行,模擬器上可以,難道不是數(shù)據(jù)庫文件沒有讀寫權(quán)限,而是數(shù)據(jù)庫文件所處的位置沒有讀寫權(quán)限?好吧,我用代碼動態(tài)創(chuàng)建試試,結(jié)果表明,成功了,順利運行。

經(jīng)過這次事情,我突然明悟了,拖進(jìn)項目中的資源是會被放在一個資源文件夾中,這個資源文件夾是只讀的,也就導(dǎo)致了放在里面的所有文件都無法進(jìn)行寫入操作。所以啊,想要對資源進(jìn)行讀寫操作,還是將需要進(jìn)行讀寫操作的文件放到系統(tǒng)分配的沙盒目錄下,如果實在是想使用拖進(jìn)去的資源文件進(jìn)行讀寫操作,可以先將資源文件拖進(jìn)項目中,在APP運行時將資源文件復(fù)制到沙盒中進(jìn)行操作。

開發(fā)中遇到的每一個錯誤都是一中收獲,收獲的可能不止這個錯誤的解決方案,還有其他的相關(guān)知識,每次解決錯誤都是一次進(jìn)步,如果解決錯誤還沒法讓自己進(jìn)步,放棄吧,這不是適合你的行業(yè)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 30,231評論 8 265
  • 人都有古稀、耄耋之年,但未到那一年月,又怎能理解那是一種怎樣的狀態(tài)。過了孩童時代,卻又未到老年之時,看著家里的孩...
    持己所好閱讀 209評論 0 1
  • 我的男孩: 我在BJ,這是北京時間2014年2月25號晚上十點,在昏黃的燈光前看著地圖。 我與你相差12小...
    嗨_暄清閱讀 426評論 2 4

友情鏈接更多精彩內(nèi)容