我目前正在做你正在列出的東西(減去用戶友好界面,我的只是一個命令行工具)。它工作的很好,我構建和運行該工具,它使用plist文件重新生成我的核心數據持久存儲sqlite數據庫。當你推出你的應用程序時,具有相同文件名的文件將被覆蓋。如果你的核心數據的sqlite數據庫被稱爲「asdf.sqlite」,那麼你只要確保它包含在你的新捆綁包中,它將替換舊的。
但是,要小心修改數據模型。在這種情況下,您需要執行數據模型遷移並將舊模型映射到新模型。如果您嘗試使用舊數據模型訪問核心數據持久性存儲,則會遇到運行時錯誤。
如果沒有人對數據模型進行過更改,那麼你沒事。只需使用自定義工具重建數據庫,然後將項目交給其他人。
回覆:
至於再生核心數據 持久存儲......究竟是 你完成這個? 如何知道何時更新商店或您是否在每次運行 應用程序時創建商店 ?
我的命令行應用程序引用(符號鏈接),以相同的數據模型和實體源代碼的iPhone應用程序(這個變化在iPhone項目的方式將提供給我的命令行工具)。我的項目尋找一個plist文件,我必須定製應用程序以遍歷整個plist文件並將該信息添加到核心數據數據庫。每次運行應用程序時,它都會刪除舊的sqlite文件並將其替換爲新的文件。所以如果我需要讓其他人管理我的應用程序,他們只需要知道如何修改plist文件以及如何運行命令行應用程序。 Out在生成應用程序的調試文件夾中彈出一個sqlite數據庫。
我的應用程序是一個參考工具,所以我只需要在參考資料發生變化時更新我的核心數據庫。當我進行更改時,我將生成的sqlite文件複製到我的iPhone項目中,並確保將其複製到應用程序包中。
順便說一句,這種方法只適用於您計劃在您的應用程序上傳送READ ONLY數據。如果使用部署的應用程序時將寫入相同的持久性存儲區,則每次更新時用戶的更改都將丟失。您可以使用多個商店(一個用於只讀,另一個用於用戶編寫的數據)解決此問題。
我描述的方法假定您只是通過應用商店更新來更新核心數據庫。如果您的核心數據生成代碼位於iphone應用程序中,那麼您可以在應用程序每次運行時重新生成代碼,但如果數據是靜態的,並且在更新應用程序之前預計不會更改,則不需要該代碼。
RE:
請問您的應用程序重建 sqlite的DB文件每次運行 以及時間文件夾?
簡答:不,我的iPhone應用程序不會在每次運行時重建sqlite數據庫。我的iPhone應用程序從不重建數據庫。
Long答案:爲了澄清一次,有兩個應用程序。 App1是使用核心數據數據庫的iPhone應用程序,App2是生成核心數據數據庫的桌面應用程序。最初,只有App1,iPhone應用程序。每次運行iPhone應用程序時,它都會從plist(XML)文件重新生成sqlite數據庫。由於我的db非常大,它增加了我的應用程序的加載時間很多。這是不可接受的,所以我做了這樣的事情,以便iPhone應用程序只在生成數據庫時才能找到數據庫文件(表明該應用程序正在第一次運行)。然後我意識到沒有必要讓應用程序第一次加載時間過長,所以我從iPhone應用程序中完全刪除了這些代碼,並創建了一個單獨的Mac OSX命令行應用程序app2來處理生成sqlite數據庫。這個程序app2只能在我的電腦上運行,所以我必須把生成的sqlite文件放到我的iPhone app1項目中。此重建的sqlite數據庫文件僅在向App Store提交更新時才提供給用戶。
謝謝pokstad。我沒有看到我的用戶很快就會改變數據模型,所以我不會爲此擔心。至於重新生成核心數據持久性存儲......您是如何完成這項工作的?你怎麼知道什麼時候更新商店,或者你每次運行應用程序時都創建商店? – Gshock 2011-03-16 20:25:07
查看我的回覆以上 – pokstad 2011-03-16 21:10:17
有意義。據我瞭解,我的應用程序包中有我的數據庫,然後將其複製到下載應用程序的iPhone用戶的文檔文件夾中。您的應用程序在每次運行時都會在文檔文件夾中重建sqlite數據庫嗎? (這是我不太明白的部分) – Gshock 2011-03-18 12:32:44