1
考慮具有兩個屬性的核心數據實體:text
和 - 爲了簡單起見,textLength
。 textLength
是每次更改text
時計算出的屬性。我有三個要求:核心數據中的計算屬性
- 更新
textLength
每次text
變化,理想的NSManagedObject
子裏面。 textLength
由於性能原因無法根據需求進行計算(我使用的實際計算的屬性計算起來要貴得多)。- 每次更新
text
時更新UI。
我的解決方案几乎就在那裏。我提供一個自定義的訪問爲setText:
,像這樣:
- (void)setText:(NSString *)text
{
static NSString *key;
if (!key) key = NSStringFromSelector(@selector(text));
[self willChangeValueForKey:key];
[self setPrimitiveText:text];
self.textCount = text.count;
[self didChangeValueForKey:key];
}
並在UI採用國際志願者組織觀察員文本的變化:
[someObject addObserver:self forKeyPath:NSStringFromSelector(@selector(text)) options:NSKeyValueObservingOptionNew context:someContext];
這工作正常,在大多數情況下,當我執行撤消除。我直接將Core Data調用setPrimiteValue:forKey:
,這不會觸發我的計算邏輯。因此,當UI被通知更改時,textLength
值已過時。
按需計算textLength
的缺點,計算邏輯應該在哪裏?
+1 Nice!所以你會建議把計算邏輯放在兩個地方(自定義存取器和'awakeFromSnapshotEvents:')? – hpique
從這兩個地方觸發,但計算應採用不同的方法... – Wain
我剛剛嘗試過這一點,它似乎'awakeFromSnapshotEvents:'在KVO通知被觸發後調用,所以它也不能解決問題。那麼,我想我也可以觀察'textLength',但保持簡單會更好。 – hpique