我想跟蹤NSManagedObject性質的變化,以保持的NSData * LASTUPDATE財產「最新」NSManagedObject的timeStamp更新
有幾種方法得到通知時NSManagedObject改變其性質
I.首先是覆蓋你想跟蹤的所有屬性的setter方法。這在NSManaged對象中非常複雜 - 請檢查它here
二。其次可能是一個好的。您可以重寫每個屬性更改時調用的「didChangeValueForKey」方法。
-(void)didChangeValueForKey:(NSString *)key{
[super didChangeValueForKey:key];
NSLog(@"Value for key:%@ has changed", key);
}
不幸的是,我們不應該重寫此方法,因爲該說的文檔...:
「你不應該重寫此方法。」
三,重要價值觀察導致我們回到IInd方法,重寫「didChangeValueForKey」。
upd。四,我試圖覆蓋-willSave方法
-(void)willSave{
NSArray *observedKeys = @[@"name", @"imageType"];
NSDictionary * changesALL = self.changedValues;
for (id key in changesALL){
if ([observedKeys containsObject:key]){
self.lastUpdate = [NSDate date];
NSLog(@"updated For key: %@", key);
}
}
}
這導致了不定式循環,這在文檔中有描述。 (本書雖然是正確的做法在這裏所描述的,所以我已經回答了這個問題的話)
如果要更新一個持久的屬性值,你通常應該測試相等>與現有價值的新價值在做出改變之前。如果使用標準訪問器方法更改屬性>值,則Core Data將觀察由此產生的更改>通知,因此在保存對象的託管對象>上下文之前再次調用willSave。如果你繼續在willSave中修改一個值,willSave將繼續被調用>直到你的程序崩潰。例如,如果您設置了上次修改的時間戳,則應檢查您是否>先前將其設置爲相同的保存操作,或者現有時間戳不小於當前時間的小差值。通常,最好爲所有保存的對象計算一次timestamp(例如,響應> NSManagedObjectContextWillSaveNotification)。
你想跟蹤什麼?爲什麼?這決定了相應的方法... – Wain
我必須跟蹤NSManaged對象的最後更新 – KIO