2013-05-31 61 views
0

我想動態更改我的核心數據模型中某些屬性的默認值。有沒有辦法更改核心數據屬性的默認值

例如,我的應用程序處理房地產投資,我有一個屬於利率(類型浮動)的屬性。如果用戶爲他們正在分析的特定房產輸入3.5%的利率(浮動價值爲3.5),我希望他們分析的下一個房產的價值能夠自動填充3.5。

有沒有辦法做到這一點,而無需繼承NSManagedObject?

回答

5

好問題 - 默認情況下,託管對象使用託管對象模型中給定的默認值進行初始化。但正如你所說,有時你可能需要一個動態的默認值(蘋果公司在他們自己的文檔中使用的例子是使用當前的日期/時間作爲默認值)。

不幸的是,我不相信有一種方法可以做到這一點,而無需繼承NSManagedObject。有一種Apple推薦的方式來執行此操作,而不是覆蓋init方法(不推薦),而是使用awakeFromInsert方法,該方法在有問題的對象首次插入托管對象上下文時調用。

這裏是蘋果公司從自己的文件說:

awakeFromInsert:

您通常使用此方法來初始化特殊的默認屬性值。該方法在對象的生命週期中僅調用一次。

如果要在此方法的實現中設置屬性值,通常應使用原始訪問器方法(setPrimitiveValue:forKey:或更好 - 適當的自定義基本訪問器)。這確保將新值視爲基準值,而不是記錄爲有問題屬性的可撤銷更改。

所以回答你原來的問題 - 我不能想辦法做到這一點沒有子NSManagedObject,子類是用於處理動態默認值的正式推薦的方法。

+0

是的。有沒有必要擔心NSManagedObject的子類化,有一些工具,如mogenerator,使它變得輕而易舉 – Abizern

+0

感謝您的答案。我明白如何使用awakeFromInsert來設置默認值。接下來的問題就變成了,我在哪裏存儲所有的默認值?也許我應該保留我的對象模型的一個「默認」副本,並在awakeFromInsert方法中引用它。當用戶更改利率時,它將更新當前對象值以及「默認對象」值。 – ChemDev

相關問題