2012-03-12 55 views
2

我使用Phonegap爲Android和iOS開發了一個應用程序。這兩個應用程序已經成功運行並可在商店中使用。現在我爲更新添加了一些更改。如果我在先前版本中存儲了數據(使用SQLite數據庫)並更新爲新數據,則IOs 5.1上的Storage Api不再有效。Phonegap(1.4.1)存儲不再適用於iOS 5.1

如果我打電話

var db = window.openDatabase("mydb", "1.0", "", 5000000); 

沒有任何反應。

對於Android來說它工作正常,如果我進行全新安裝,或者如果我的應用程序的先前版本中沒有數據存儲在數據庫中,它也可以正常工作。我正在使用其他Phonegap函數,如Notification或localStorage,它們工作得很好。

任何幫助將不勝感激,因爲我真的運行的想法:)

回答

1

很奇怪,它應該是工作...順便說一下,在iOS5.1,的WebSQL被認爲是tempory數據可隨時刪除...

可以更改調用私有API的WebKit數據的位置。您應該能夠將該位置設置爲像文檔這樣的安全文件夾。我沒有測試這個解決方案,但看看這篇文章:http://stackoverflow.com/questions/4527905/how-do-i-enable-local-storage-in-my-webkit-based-application

我認爲更安全的方法是使用帶有phonegap插件的SQLite(與WebSQL相同)。該插件將數據庫保存在Document文件夾中,這意味着數據庫不會被刪除並由iCloud保存。

這裏是本地人的SQLite PhoneGap的插件:https://github.com/davibe/Phonegap-SQLitePlugin 關於這個插件,還有的WebSQL API之間的一些差異,這裏是一個適配器: https://gist.github.com/2009518

你也應該遷移舊的WebSQL數據庫文件(存儲在庫/ WebKit或Caches目錄)到Document文件夾。下面是一個代碼做到這一點: https://gist.github.com/2009491

還有一個在科爾多瓦的最新版本中實現的修復:https://issues.apache.org/jira/browse/CB-330(它使數據庫文件的備份的文件夾)

,如果數據很重要,你應該把它保存到服務器上。我寫了一個小的lib到sqlite的DB同步到服務器: https://github.com/orbitaloop/WebSqlSync

+0

嗨塞繆爾,謝謝你的迴應。我正在使用Phonegap:Build開發Android版Java,以便爲iOS獲得我的.ipa。所以爲了使用這個插件,我必須在Mac上開發使用XCode,而目前我還沒有這個插件。我仍然試圖找到一種只使用JavaScript的解決方案,但如果在接下來的幾天內沒有找到,我會嘗試插件。 – Anna0815 2012-03-14 14:15:55

+0

這是怎麼一起的? Java和Phonegap:構建? – 2012-04-11 07:57:59

+0

@ Anna0815:我們在這裏談論iOS。我認爲Android也有一個phonegap/cordova SQLite插件,但它不是很有用,因爲我認爲Android沒有這個問題。 對於Phonegap:build,在Cordova 1.6中實現了一個修復:https://issues.apache.org/jira/browse/CB-330 – Samuel 2012-04-18 17:03:48

2

有與Webkit的存儲這兩個問題和iOS 5.1

修復
  1. 存儲從移動/ Webkit的到/緩存
  2. 寄存沒有調整到更新文件夾結構在iOS 5.1(WebKit的錯誤)
下一個應用程序更新

https://issues.apache.org/jira/browse/CB-330

該解決方案似乎比改變調用私有API的Webkit數據的位置更安全。在App運行時,使用Webkit存儲位置。在恢復或終止所有數據時將備份到文檔文件夾。時間戳確保舊的備份無法覆蓋較新的存儲數據(如果應用程序崩潰...)。

最好:使用具有該修復程序的應用程序的較舊iOS版本的用戶不會因iOS更新而遭受損失。這就是爲什麼一個人不應該等待...