मैं एक दो के साथ NSManagedObject
गुण होते हैं।Autoupdating NSManagedObject संपत्ति संशोधन टाइमस्टैम्प
मैं स्पष्ट रूप से -willSave
विधि का उपयोग नहीं कर सकता क्योंकि मेरा संदर्भ कभी-कभी सहेजा जाता है, और score_timestamp
अद्यतित नहीं होगा। तो मुझे या तो -setScore:
ओवरराइड करना चाहिए या अपने प्रबंधित ऑब्जेक्ट को अपने score
फ़ील्ड के लिए एक कुंजी-मूल्य पर्यवेक्षक के रूप में सेट करना चाहिए।
-setScore:
समाधान आसान लगता है:
- (void) setScore:(NSNumber *)score
{
[self willChangeValueForKey:@"score"];
[self setPrimitiveScore:score];
[self didChangeValueForKey:@"score"];
self.score_timestamp = [NSDate date];
}
वहाँ चीजें हैं जो रास्ता करने में किसी भी चेतावनियां हैं? या मुझे एक केवीओ समाधान का उपयोग करना चाहिए?
अद्यतन
अब तक मैं दो प्रतिक्रियाओं है कि मेरे कोड setValue: forKey:
के माध्यम से काम नहीं करेगा प्राप्त हो गया है और मैं अभी भी उदाहरण के लिए इंतज़ार कर रहा हूँ। बेवकूफ कॉलिंग [(NSManagedObject *)myObject setValue:value forKey:@"score"]
मेरे सेटर को वही कहते हैं।
तो अगर मैं केवीओ समाधान पर स्विच करता हूं, तो क्या मुझे सभी awake
विधियों में willTurnIntoFault
में हटा देना चाहिए? या यह इतना आसान नहीं है?
गंभीरता से, दोनों उत्तरदाताओं ने उस सेट को बताते हुए ... काम नहीं किया गलत है। आप अपने एक्सेसर में ब्रेकपॉइंट डालकर, फिर सेटवैल्यू का उपयोग कर मूल्य बदलकर इसे अपने आप परीक्षण कर सकते हैं। – jrturton
@jrturton मैंने इसे पहले ही परीक्षण किया है, यह निश्चित रूप से बुलाया जाता है। लेकिन मैं यह सुनिश्चित करने के लिए कोर डेटा विशेषज्ञ नहीं हूं कि एक्सेसर के बिना मेरी संपत्ति बदलने का कोई और तरीका है या नहीं। मेरा मतलब है कि कभी-कभी वास्तविक कोड में इस्तेमाल होने का तरीका। – iHunter
नहीं। सभी कोर डेटा कॉल आपके सेटर के माध्यम से जाएंगे (संभवतः पहले सेटव्यू फोरके के माध्यम से)। यह encapsulation सिद्धांत का हिस्सा है। आप इवर के लिए कुछ अजीब सीधी पहुंच प्राप्त कर सकते हैं, लेकिन ऐसा कुछ ऐसा होना होगा जो आपने स्वयं लिखा होगा जो शायद प्रबंधित ऑब्जेक्ट संदर्भ को भी तोड़ देगा। आप अपने आप ऐसा नहीं करेंगे, क्या आप? – jrturton