दूसरे उत्तर में मुझे 1,2 और 3 बहुत अक्षम पाए गए। विशेष रूप से 2 और "पेरेंट वॉचिंग इट्स चाइल्ड" ब्लॉग पोस्ट में उदाहरण। इसके साथ मेरा मुद्दा है कि प्रत्येक एकल माता-पिता को संदर्भ अधिसूचना का जवाब देना पड़ता था और अनिवार्य रूप से हर वस्तु को बचाया जाता है यदि वह बच्चा है (इस तथ्य में कभी भी इस तथ्य को ध्यान में रखें कि ContextDidSave अधिक उपयुक्त है!)। इसके बजाय, मैं एक विकल्प 4:
- बच्चे को ओवरराइड किया गया है और माता-पिता युक्त एक NSManagedObjectContextDidSaveNotification प्रसारित करें।
मेरा समाधान अधिक कुशल है और मेरे लिए अधिक ऑब्जेक्ट उन्मुख महसूस करता है क्योंकि जो वस्तु बदल रही है, वह अपने स्वयं के परिवर्तन का जवाब दे रही है। इसे लागू करने के, बच्चे वस्तु उपयोग के भीतर:
-(void)didSave{
[super didSave];
// notify that the parent has changed.
[[NSNotificationCenter defaultCenter] postNotificationName:NSManagedObjectContextObjectsDidChangeNotification
object:self.managedObjectContext
userInfo:@{NSUpdatedObjectsKey : [NSSet setWithObject:self.parent]}];;
}
माता पिता टाइमस्टैम्प, स्वच्छ समाधान निम्नलिखित (second last post) मैं मदद कर सकता है का उपयोग कर रहे हैं, उदाहरण के अद्यतन करने के लिए अभिभावक उपयोग में:
- (void) awakeFromInsert
{
[super awakeFromInsert];
// set the default dates
NSDate* date = [NSDate date];
self.timestamp = date;
//allow any future modifications to change the timestamp
_finishedStartup = YES;
}
- (void) awakeFromFetch
{
[super awakeFromFetch];
// we should already have creation and modified dates.
_finishedStartup = YES;
}
- (void) didChangeValueForKey: (NSString *) thisKey
{
[super didChangeValueForKey: thisKey];
if(![thisKey isEqualToString:@"timestamp"] && // prevent infinite loop
![self isFault] &&
![[[self managedObjectContext] undoManager] isUndoing] &&
_finishedStartup) // ensures we arent being called by the object being loaded from fetched data.
{
self.timestamp = [NSDate date];
}
}
मुझे प्यार है कि मैं शून्य में एक प्रश्न भेज सकता हूं और प्रतिक्रिया प्राप्त कर सकता हूं! मैंने समाधान # 2 पर फैसला किया। मैं माता-पिता के रिश्तों के माध्यम से लूपिंग कर रहा हूं और जांच कर रहा हूं कि कोई रिश्ते प्रबंधित है ऑब्जेक्ट्स अधिसूचना प्रबंधित ऑब्जेक्ट के समान हैं। –
याद रखें कि आप उन 'NSSet' उदाहरणों के विरुद्ध एक अनुमान लगा सकते हैं जो वापस आते हैं। लूप की कोई ज़रूरत नहीं है :) भविष्यवाणी '@" इकाई जैसी कुछ हो सकती है। नाम ==% @ और& parent ==% @ "' जो आपको उस मौजूदा इकाई के किसी भी बच्चे को वापस देगी जो आपके संबंध में है। –
बहुत बढ़िया, धन्यवाद! एक जादू की तरह काम करता है। मुझे उम्मीद है कि अगर आप इस विषय पर अपने ब्लॉग पोस्ट का लिंक शामिल करते हैं तो आपको कोई फर्क नहीं पड़ता ["पेरेंट वॉचिंग इट्स चाइल्ड"] (http: //www.cimgf।कॉम/2011/10/14/अभिभावक-देख-उसका-बच्चा /) और आपकी पुस्तक ["कोर डेटा"] के लिए एक प्लग भी है (http://www.amazon.com/Core-Data-Apples-API-Persisting/डीपी/1 9 34356328/रेफरी = sr_1_3? यानी = यूटीएफ 8 और क्यूआईडी = 1319500666 और एसआर = 8-3) मैंने इसे अक्सर संदर्भित किया है। इसके अलावा, मेरे मामले में मुझे अन्य चीजों को करने की आवश्यकता थी, जो एनएसएमएनेज्ड ऑब्जेक्ट सबक्लास में टाइमस्टैम्प के लिए आदिम एक्सेसर्स बनाते थे, ताकि इसे अनंत अधिसूचना लूप में जाने से रोका जा सके। –