2013-01-23 30 views
0

如何從我的App Store版本交換2個屬性到我當前的開發版本? 問題是我沒有更改數據模型,因此沒有數據模型遷移。 我試着添加一個新的數據模型版本(沒有更改最後一個),創建一個映射模型和一個自定義實體遷移策略,在createDestinationInstancesForSourceInstance中執行此屬性交換。 它不起作用,因爲從未調用遷移。經過一些測試後,我只在第二個數據模型不同時才調用relised,但不相等,這就是我想要的。 你有什麼想法或建議嗎? 我唯一的想法是創建一個虛擬屬性或類似的東西來創建一個不同的數據模型,將強制啓動遷移過程。 非常感謝。 裏卡多。如何從我的App Store版本交換2個屬性到我當前的開發版本?

+0

您是否將新數據模型版本標記爲活動版本? – Mundi

+0

是的。我認爲核心數據知道我沒有真正改變我的數據模型,然後它跳過了遷移。不確定。 – Ricardo

回答

0

如果您不更改數據模型,則遷移功能不是您想要的。這就像用大炮向麻雀射擊一樣。

只要保留用戶首選項標誌來檢查屬性是否已更新。或者,您可以使用提取進行檢查。

然後只需更新屬性「手動」,也許在applicationFinishedLaunching

if (needsUpdate) { 
    // fetch the concerned entities 
    // iterate through fetchedObjects and change the concerned attributes 
} 
[self.managedObjectContext save:&error]; 

爲了安全起見,你可以使用NSManagedObjectContext小號performBlock:一個單獨的線程做到這一點。

+0

感謝蒙迪。這正是我對遷移的看法。 我在解決方案中看到的問題是,您可以多次應用該更新,就像您發佈的更新一樣多。換句話說,必須有某種版本控制。也許是對CFBundleVersion進行測試,但據我所知,不可能獲取即將被用戶更新的軟件包版本。 也許添加一個虛擬屬性是最實用的方法,因爲模型映射是以串行方式,一個接一個地以及針對特定版本應用的。你怎麼看? – Ricardo

+1

如上所述,這是過分的。如有必要,請保留版本用戶首選項。如果您堅持使用遷移基礎架構,只需*重命名*一個屬性,並且遷移應該觸發。確保全局替換代碼中的屬性名稱。 – Mundi

相關問題