2011-10-28 87 views
0

我在幹什麼:核心數據遷移 - 這是一個簡單的遷移,應該怎麼做?

我很新的核心數據,我已經意識到,在我的應用我目前使用的是不妙。基本上,我有一個具有四個不同字符串屬性的實體。每次我使用數據庫時,我都會用四個字符串中的每一個來傳遞數組。

現在,我想要做的是添加更多的屬性到這個實體。如果我可以將方法添加到此實體以便在不同類中使用數據庫時節省大量重複,那也是非常好的。

所以,我認爲最好的方法(也許我本來應該這樣做)是使用Xcode爲這個實體創建一個類 - 這裏有大量的在線教程。這樣,我可以傳遞這個類的實例 - 比使用數組更清潔!


如果我堅持:

有一種簡單的方法,從我目前的核心數據模型遷移到一個與添加的屬性和相應的類?我還希望在遷移發生時將現有字符串中的一個拆分爲兩個字符(姓名變成名字+姓氏)。

我應該使用內置的遷移工具嗎?或者,我應該從頭開始完全創建一個新的數據庫模型,並構建一個自定義類來檢查舊數據庫,然後轉換每個對象並將其存儲在新對象中?最好的辦法是什麼 - 因爲我是數據庫/核心數據的新手,我不想開始只是爲了找出一個更容易或更好的方法來做到這一點。

回答

1

您需要創建一個託管對象模型包並啓用遷移。這基本上允許您加載多個數據庫模型以檢索相同類型的數據。然後你可以告訴託管對象的上下文來複制一切。欲瞭解更多信息:http://www.timisted.net/blog/archive/core-data-migration/

+0

謝謝,博客文章是一個金礦 - 我一直在尋找類似的東西但找不到它。乾杯 –

0

這聽起來像我們的模型很簡單。如果您所做的只是爲現有模型添加更多屬性,則可以執行輕量級遷移。這意味着CoreData將爲您執行遷移。

執行以下操作:
1.在Xcode中,單擊您的模型。它應該有.xcdatamodeld擴展名。 2.轉到Editor-> Model Version並添加一個新模型,注意更改版本。 3.添加新的屬性。 4.確保將新屬性添加到相關的託管對象子類。 5.在您的持久性商店協調員實施中,很可能在您的應用程序委託中。確保你添加了選項NSMigratePersistentStoresAutomaticallyOption。你的代碼應該是這個樣子:

NSPersistentStoreCoordinator *psc=persistentStoreCoordinator; 
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
           [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
          [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,nil]; 
    NSError *error=nil; 
    if (![psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) { 
      // handle errors 
    } 

這裏是蘋果的輕量級遷移的文檔 http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html

好luck1