假設我有一個名爲Item
的NSManagedObject
子類。每當保存item
實例時,我想根據瞬態屬性的計算值更新屬性。我知道,只要瞬態屬性發生變化,我就可以更新屬性,但對於這個問題,假設我不想這樣做的一個很好的理由。如何在保存之前自動設置計算的NSManagedObject屬性?
我試圖做到這一點的方法willSave
如下:
- (void)willSave
{
self.computedProperty = [self computedValueFromTransientProperty];
}
保存上下文時,這會導致系統崩潰。如果我將代碼移出willSave
並在調用save之前顯式設置該屬性,則它可以正常工作。蘋果文檔說你應該避免更改willSave
中的託管對象屬性。
問題:是否有一種很好的方法可以將功能構建到NSManagedObject
子類中,因此屬性可以在保存之前進行更新,無需從類的外部明確設置屬性,並且無需每次設置屬性瞬態屬性更改?
謝謝,我沒看到在文檔中,但沒有直接思考。我使用了你的第一個建議,但是爲了消除雙重計算,添加了一個初始化爲nil並在'didSave'中設置爲零的iVar。在'willSave'中,如果這個iVar是零,我將它設置爲計算值。然後我使用上面的邏輯將這個iVar與持久屬性進行比較。很好的工作,我只做一次昂貴的計算。謝謝! – XJones