मेरे पास कस्टम NSManagedObject
सबक्लास है, कहें, Person
। मेरे पास -addObserver:forKeyPath:options:context:
के साथ Person
के विभिन्न गुणों का निरीक्षण करने के लिए पंजीकृत है, जिनमें से कुछ "नाम" की तरह लगातार हैं और अन्य सिर्फ "पीने" जैसे कोर डेटा से संबंधित केवीओ-अनुपालन एक्सेसर्स हैं।NSManagedObject और केवीओ बनाम प्रलेखन
@interface Person : NSManagedObject
{
BOOL drinking;
}
@property (nonatomic, retain) NSString* name;
@property (nonatomic, readonly) BOOL drinking;
@end
@implementation Person
@dynamic name;
...
- (void) getDrunk {
[self willChangeValueForKey: @"drinking"];
drinking = YES;
[self didChangeValueForKey: @"drinking"];
}
...
@end
सब कुछ काम करता है। जब भी मैं -getDrunk
भेजता हूं या name
संपत्ति सेट करता हूं, तो दृश्य को अधिसूचित किया जाता है। मैं छोड़कर जब मैं NSManagedObject
डॉक्स पढ़ा एक खुश आदमी हूँ जो राज्य:
+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key
तथ्य 1. हाँ अगर रिसीवर कुंजी-मान कुंजी के लिए परिवर्तन अधिसूचना के अवलोकन के लिए स्वत: सहायता प्रदान करता है, अन्यथा नहीं।
तथ्य 2. एनएसएमएनेज्ड ऑब्जेक्ट के लिए डिफ़ॉल्ट कार्यान्वयन मॉडलिंग गुणों के लिए डी नहीं, और अनमोल गुणों के लिए हाँ।
अब मैं दस्तावेज़ों से उपरोक्त दो तथ्यों को पार्स करने के लिए कड़ी मेहनत कर रहा हूं। तथ्य 2 की जांच करना आसान है और कक्षा व्यक्ति वास्तव में @ "नाम" और @ "पीने" के लिए हाँ देता है। लेकिन फिर, नाम बदलते समय दृश्य को कैसे सूचित किया जाता है? और didChangeValueForKey: KVO डॉक्स स्पष्ट रूप से कहते हैं,
स्वत: पर्यवेक्षक अधिसूचना का उपयोग करना, यह willChangeValueForKey के आमंत्रण के साथ एक संपत्ति के लिए ब्रैकेट परिवर्तन करने के लिए आवश्यक नहीं है जब मुख्य मान कोडिंग और मुख्य मान अनुरूप तरीकों कोडिंग के माध्यम से गुण परिवर्तनशील।
तो, अगर व्यक्ति @ "नाम" के लिए +automaticallyNotifiesObserversForKey:
से नहीं देता है, यह प्रतीत होता है मैं मैन्युअल will/didChangeValueForKey:
में नाम सेटर रैप करने के लिए KVO काम करने के लिए किया है। हालांकि, केवीओ काम करता है ठीक। मैं क्या खो रहा हूँ? NSManagedObject
के ओवरराइडिंग +automaticallyNotifiesObserversForKey:
में क्या बात है और यदि यह मानक केवीओ व्यवहार को बदलता प्रतीत नहीं होता है तो इसे दस्तावेज करना क्या है?
कृपया, मेरी स्वच्छता प्राप्त करने में मेरी सहायता करें।
महान प्रश्न;) – Colas