2010-05-01 30 views
4

我有一個非常複雜的問題,我想與你分享,也許有人可以爲我回答。 在我開始之前我不得不說我在這方面很新。在不擦除用戶數據的情況下遷移/更新核心數據應用程序!

所以,我有一個coredata iphone應用程序(很像食譜應用程序),使用預先填充的SQL數據庫。 用戶可以添加/編輯自己的數據,但默認數據不能被刪除。 useres數據全部保存在同一個sql數據庫中。

問: 我有什麼才能做到: - 更新一些(不是全部)存儲在沒有「接觸」用戶的數據的SQL數據庫默認的數據? (模型將保持不變 - 沒有新的實體等) (如果用戶卸載應用程序,然後重新安裝新版本,一切都會好的,但我不想這樣做,顯然)。

可以有人請幫助編碼水平?

+0

似乎是 2750614重複,問剛剛幾分鐘前。 – 2010-05-01 17:31:41

+0

我覺得我的問題是一個小時更新! LOL 有趣並令人鼓舞的是,我不是唯一一個遇到同樣問題的人。 – treasure 2010-05-02 07:09:23

回答

0

由於您輸入了默認數據,您必須知道這些記錄的ID /密鑰。您只需要一個更新腳本來更改默認數據。

+0

我已經設法更新沒有問題我的默認數據通過替換舊的SQL與新的更新之一。但是我鬆了所有用戶輸入的數據。 我將不勝感激更詳細的(如果可能的話)答案/教程來指導我尋求解決方案。 再次感謝您的時間! – treasure 2010-05-02 07:06:11

1

核心數據明確支持模型版本控制,並提供在版本之間遷移數據的工具。這應該包含您需要的信息。 Link to Developer Docs for Migration

+0

感謝您的快速回復。但是,我的問題稍有不同,我會很感激一些教程鏈接或一些代碼開始。 我已經看到你給巴士的鏈接,我不得不說我有點厚並且不安靜地得到它。 預先感謝您提供給我的所有信息...... – treasure 2010-05-02 07:03:47

2

爲了支持添加新的實體等以後,你要使用的是這裏所描述的版本控制和自動重量輕遷移:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html#//apple_ref/doc/uid/TP40008426-SW1

基本上你創建數據的新版本模型使用Xcode中的Design->Data Model菜單項,然後進行一些代碼更改。這將導致核心數據自動將舊型號遷移到新型號。你所能做的改變是有限的。您可以添加新實體,並將可選屬性添加到現有實體,或設置具有默認值的必需屬性。

有一件事讓我意識到,當您要使用版本控制和遷移時,加載核心數據NSManagedObjectModel的方式發生了變化。如果沒有移民,你可能有這樣的:

NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; 

一旦你開始使用版本管理和遷移,這需要改變的東西是這樣的:

NSString *path = [[NSBundle bundleForClass:self.class] pathForResource:@"DataModelName" 
                   ofType:@"momd"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
NSManagedObjectModel *model = [[[NSManagedObjectModel alloc] initWithContentsOfURL:url] autorelease]; 
相關問題