在項目的開發(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è)耕赘。