2013-11-25 141 views
1

我們的應用程序有一個過程,我們建立一個sqlite數據庫並將其上傳到Amazon S3。當應用程序在用戶電話上啓動時,它會檢查數據庫的版本號,如果存在更新的版本,它會下載並替換手機上當前安裝的sqlite數據庫。IOS 7損壞的數據庫

由於IOS 7,我們已經注意到,很多手機都得到一個損壞的數據庫錯誤。

我的直覺告訴我,它可能與ios 7默認日誌記錄模式有關,而WAL日誌記錄現在是默認日誌記錄,但是當我們使用IOS 7生成文件時,IOS 6上發生了同樣的問題。

有沒有人遇到過這個問題?

+0

您使用的是核心數據還是原始SQLite? – Wain

+0

你上傳了哪些文件?如何將文件訪問與任何併發數據庫訪問同步? –

+0

Wain我們正在使用核心數據棧 – Constantine

回答

1

兩件事我能想到的:1),但是也有一些來自混淆SQLite的原DB掛在一些外部文件。 2)當你的應用程序「啓動」時,你的數據庫是否仍然打開(從後臺返回?)。如果你想用一個新的來代替一個開放的數據庫,文件系統可能會拒絕你刪除一個打開的文件,那麼你就試着寫在上面新建一個,等...

否則,可以單獨下載新的數據庫,打開它的內容並從內容更新現有的數據庫 - 更多的工作。

+0

歐文,我已經證實,下列文件都在目錄: CDCFF6AA-01EB-4C03-A2FB-8680909047FC /文檔/ MobileShopper2.sqlite CDCFF6AA-01EB-4C03-A2FB-8680909047FC /文檔/ MobileShopper2 .sqlite-SHM CDCFF6AA-01EB-4C03-A2FB-8680909047FC /文檔/ MobileShopper2.sqlite,沃爾瑪 – Constantine

+0

所以,當你吹走數據庫用新鮮來取代它,你也吹走所有其他文件?請注意,這些文件可能仍處於打開狀態,您可能無法刪除進程使用的文件。 –

+1

既然你說它是一個CoreData後端,那麼可能還有其他問題。 Apple的CoreData持久性存儲是專有的。您最好以一些可讀格式下載替換數據,並通過刪除現有記錄並將其添加到替換記錄中,將其導入到現有的CoreData存儲中。換句話說,讓CoreData處理數據庫,然後將替換數據發送給CoreData。 –