ऐसा लगता है कि आपकी समस्या तथ्य यह है कि keyPathsForValuesAffectingTotal
केवल उल्लेख मुख्यपथ "itemLink" के साथ क्या करना है।
चूंकि यह कई रिश्तों का मार्ग है, इसलिए आप परिवर्तन के लिए एक सेट का निरीक्षण करने के लिए प्रभावी ढंग से अपनी बोली वस्तु को बता रहे हैं। एक सेट जो करता है वह यह प्रबंधित करता है कि वस्तुएं इसके सदस्य हैं या नहीं। इसलिए यह बताता है कि आइटम को "itemLink" से जोड़े या हटाए जाने पर अपडेट क्यों प्राप्त होते हैं, लेकिन केवल यही।
आप इस बात में रुचि नहीं रखते हैं कि कौन से आइटम सेट के सदस्य हैं, फिर भी आप उन सदस्यों के (म्यूटेबल) गुणों में रुचि रखते हैं - इस मामले में कीमत। तो उपर्युक्त के अतिरिक्त, आप "itemLink" के प्रत्येक सदस्य को प्रासंगिक बोली ऑब्जेक्ट की "कुल" कुंजी के सभी पर्यवेक्षकों को सूचित करने के लिए चाहते हैं, जब भी यह "मूल्य" बदल जाता है।
दुर्भाग्यवश, यह आपके बोली वर्ग में एक निर्भर कुंजीपैथ के रूप में "itemLink.price" जोड़ने जैसा आसान नहीं है, क्योंकि केवीओ आपको कई रिश्तों को 'माध्यम' देखने की अनुमति नहीं देता है।
यदि आप अपनी आइटम इकाई के उदाहरणों के लिए एनएसएमएनेज्ड ऑब्जेक्ट सबक्लास का उपयोग करते हैं, तो आप इस कार्यक्षमता को मैन्युअल रूप से जोड़ सकते हैं। कोको को बताने के लिए अपने आइटम क्लास में + automaticallyNotifiesObserversForKey:
ओवरराइड करें, आप "मूल्य" कुंजी के लिए मैन्युअल रूप से केवीओ नोटिफिकेशन प्रबंधित करने जा रहे हैं, फिर उचित सूचना भेजते हुए अपनी setPrice:
विधि लागू करें। कुछ ऐसा:
- (void)setPrice:(id)inPrice
{
// bid = inverse relationship of itemLink
[[self valueForKey:@"bid"] willChangeValueForKey:@"total"];
[self willChangeValueForKey:@"price"];
[self setPrimitiveValue:inPrice forKey:@"price"];
[self didChangeValueForKey:@"price"];
[[self valueForKey:@"bid"] didChangeValueForKey:@"total"];
}
स्रोत
2011-06-07 21:48:09