21

साथ अवलोकन मैं के साथ अवलोकन कुंजी मान उपयोग करने के उदाहरण के लिए इतने पर देखा है एक NSArray (या NSMutableArray) और जाहिरा तौर पर आप एक NSArrayController (जो KVO के विपरीत मैं से परिचित नहीं हूँ) उपयोग करने की आवश्यकता है, लेकिन मुझे यह कैसे करना है इसके ठोस उदाहरण नहीं मिला है। क्या कोई नमूना कोड के साथ समझा सकता है?कुंजी मान एक NSArray

उदाहरण के लिए, यदि मेरे पास GameModel है जो NSStrings के NSArray (playerNameArray) के साथ अपने प्लेयर नामों का प्रतिनिधित्व करता है। मैं दृश्य में विभिन्न चीजों को अद्यतन करने के लिए उन तारों (दृश्य नियंत्रक मॉडल के डेटा को देखता हूं) का निरीक्षण करना चाहता हूं।

मुझे सूचना कैसे प्राप्त हो सकती है कि प्लेयर नाम सरणी बदल गई है?

संपादित करें: क्या आईओएस एसडीके भी NSArrayController का समर्थन करता है? यदि नहीं, तो क्या कोई और तरीका है?

उत्तर

30

आपको NSArray में परिवर्तनों का निरीक्षण करने के लिए एनएसएआरएआर नियंत्रक की आवश्यकता नहीं है। हालांकि आप इन परिवर्तनों को सीधे देख नहीं सकते हैं, यानी आप पर सीधे NSArray पर कॉल नहीं कर सकते हैं। अपने मामले में आप इसे GameModel पर @"playerNameArray" कुंजी के रूप में कॉल करना चाहते हैं।

आप अभी तक नहीं किए गए हैं। सामान्य स्वचालित केवीओ नोटिफिकेशन केवल तभी लाएगा यदि आप -setPlayerNameArray: पर कॉल करते हैं, जिससे पूरे सरणी को बदल दिया जाता है। यदि आप अधिक बारीक अधिसूचनाएं चाहते हैं, तो आपको उस सरणी में आइटम डालने, निकालने या बदलने के लिए -willChange:valuesAtIndexes:forKey: और -didChange:valuesAtIndexes:forKey: का उपयोग करने की आवश्यकता है।

जब भी सरणी की सामग्री बदल जाती है तो यह एक अधिसूचना भेज देगा। NSKeyValueObservingOptions के आधार पर आप अपना पर्यवेक्षक जोड़ते समय उपयोग करते हैं, आप एक बढ़िया फीचर भी बढ़ा सकते हैं-एक शानदार सुविधा, लेकिन आपको इस मामले में इसकी आवश्यकता नहीं हो सकती है।

नोट: आईएसओ पर एनएसएआरएआर कंट्रोलर मौजूद नहीं है। यह कोको बाइंडिंग का हिस्सा है, जो वर्तमान में केवल मैक ओएस एक्स पर ऐपकिट में मौजूद है। सौभाग्य से, आपको इसकी आवश्यकता नहीं है।

+0

मैं आईओएस -4 पर ठीक इस स्थापना की कोशिश की, और कुछ भी नहीं हुआ (दोनों कॉलबैक, कार्यान्वित Xcode स्वत: पूर्ण के माध्यम से है, तो मुझे यकीन है कि वे सही ढंग से टाइप हो रही है। मैं जाँच की सभी वस्तुओं को शामिल गैर-शून्य कर रहे हैं, सब कुछ के साथ फिर से जाँच की breakpoints)। क्या ऐप्पल ने इसे हटा दिया है? – Adam

+0

वे कॉलबैक नहीं हैं - आपको संग्रह पर नियमित केवीओ प्राप्त करने के लिए उन्हें कॉल करना होगा। –

+4

@Adam वह क्या कह रहा है आप NSMutableArray के लिए अपने स्वयं के accessors लिख सकते हैं और आग KVO नोट अपने आप को करना है। – jpswain