Bir NSManagedObject
iki ile özellikleri vardır.Autoupdating NSManagedObject özellik düzeltme damgası
Tabi bazen zaman zaman kaydediliyor ve score_timestamp
güncel olmayacak çünkü -willSave
yöntemini kullanamazsınız. Bu yüzden, -setScore:
'u geçersiz kılmalı veya yönetilen nesneyi kendi score
alanı için bir anahtar/değer gözlemcisi olarak ayarlamalıyım.
-setScore:
çözüm kolay görünüyor:
- (void) setScore:(NSNumber *)score
{
[self willChangeValueForKey:@"score"];
[self setPrimitiveScore:score];
[self didChangeValueForKey:@"score"];
self.score_timestamp = [NSDate date];
}
bu şekilde şeyler yapıyor herhangi uyarılar var mı? Yoksa bir KVO çözümü kullanmalı mıyım?
Güncelleme
Şimdiye kadar benim kod setValue: forKey:
aracılığıyla işe yaramaz iki yanıtları aldık ve hala örneğin bekliyorum. Naif arama [(NSManagedObject *)myObject setValue:value forKey:@"score"]
, ayarlamamı tümüyle aynı şekilde çağırır.
KVO çözümüne geçersem, addObserver:
tüm awake
yöntemlerini kullanmalı ve willTurnIntoFault
içinde kaldırabilir miyim? Yoksa bu kadar basit değil mi?
Cidden, her iki yanıtlayıcıda setValue ... işe yaramayacağını belirten yanıtlar yanlıştır. Bunu erişimcinize bir kesme noktası koyarak ve daha sonra setValue kullanarak değeri değiştirerek kendinizi oldukça önemsiz bir şekilde test edebilirsiniz. – jrturton
@jrturton Zaten test ettim, kesinlikle denir. Ancak, mülkümü erişimsiz olarak değiştirmenin başka bir yolu olup olmadığından emin olmak için Çekirdek Veri uzmanı değilim. Bazen gerçek kodda kullanılma yolunu kastediyorum. – iHunter
Hayır. Tüm temel veri aramaları setçerinizden geçecektir (ilk önce setValueForKey üzerinden). Kapsülleme prensibinin bir parçası. İvan'a bazı garip doğrudan erişime sahip olabilirsiniz, ancak bu, muhtemelen sizin de yönetilen nesne bağlamını da kırabilecek, kendinizin yazdığınız bir şey olmalı. Bunu kendine yapmayacaksın değil mi? – jrturton