objective c - iPhone Key-Value Observer: observer not registering in UITableViewController -
हाय मित्र iPhone डेवलपर्स,
मैं एक अनुभवी सॉफ्टवेयर इंजीनियर हूँ, लेकिन आईफोन प्लेटफॉर्म के लिए नया है। मैंने सफलतापूर्वक उप-वर्गीकृत दृश्य नियंत्रक कार्यान्वित किए हैं और दृश्य नियंत्रक स्टैक पर माता-पिता / बच्चे के विचारों को धक्का और पॉप कर सकते हैं। हालाँकि, एक दृश्य नियंत्रक को अद्यतन करने का प्रयास करते समय मैंने एक समस्या को तब देखा है जब किसी ऑब्जेक्ट को बाल दृश्य नियंत्रक में संपादित किया जाता है। बहुत असफल प्रयोग के बाद, मैंने कुंजी-मूल्य पर्यवेक्षक एपीआई की खोज की, जो ऐसा करने का सही तरीका था। मैंने फिर अपने मुख्य / माता-पिता दृश्य नियंत्रक में एक पर्यवेक्षक को पंजीकृत किया, और पर्यवेक्षक में मैं दृश्य पुनः लोड करने का इरादा रखता हूं। विचार यह है कि जब वस्तु को बच्चे के दृश्य नियंत्रक में संपादित किया जाता है, तो इसे निकाल दिया जाएगा। हालांकि, मुझे लगता है कि पर्यवेक्षक को पंजीकृत नहीं किया जा रहा है, क्योंकि मुझे पता है कि संपादन दृश्य नियंत्रक (मैं इसे डीबगर में देख सकता है) में मूल्य अद्यतन किया जा रहा है, लेकिन अवलोकन पद्धति को कभी नहीं बुलाया जा रहा है।
< P> कृपया मदद!कोड स्निपेट का पालन करें।
वस्तु को मनाया जा रहा है मेरा मानना है कि यह मूल्य-मूल्य संगत है क्योंकि मूल्य सेट किया जाता है जब सेट वेल्यू संदेश के साथ बुलाया जाता है (नीचे बाल दृश्य नियंत्रक देखें)।
Xh:
@interface X : NSObject & lt; NSCoding & gt; {NSString * नाम; ... @ प्रॉपर्टी (गैर-रचनात्मक, बनाए रखना) NSString * नाम;
X.m:
@ कार्यान्वयन एक्स @ संश्लेषण नाम; ...
मुख्य दृश्य नियंत्रक.h:
@class X; @ इंटरफेस XViewController: UITableViewController {X * x; ...
मुख्य दृश्य नियंत्रक। एम:
@implementation XViewController @synthesize x; ... - (शून्य) दृश्यडिडलोड {... [self.x addObserver: के लिए स्वयं केपैथ: @ "नाम" विकल्प: (एनएसकेएवॉल्यू ओब्सेशंसऑन न्यू | एनएसकेएवल्यूउज़र्व्हीवॉल्ड ओपन) संदर्भ: शून्य]; [सुपर व्यूडिडलोड]; } ... - (शून्य) निरीक्षण वैल्यूफोरकीपथ: (एनएसएसटीइंग *) कीपैब का ऑब्जेक्ट: (आईडी) ऑब्जेक्ट परिवर्तन: (एनएसड्राइज़मेंट *) परिवर्तन संदर्भ: (शून्य *) संदर्भ {यदि ([केपथ है एक्वल: @ "नाम"]) {NSLog (@ "एक्स में बदलाव मिला"); [Self.tableView पुनः लोडडेटा]; } [सुपर निरीक्षणवल्यूफोरकेपाथ: कीपैथ का ऑब्जेक्ट: ऑब्जेक्ट परिवर्तन: संदर्भ बदलें: प्रसंग]; }
चाइल्ड व्यू कंट्रोलर.म: (यह सही ढंग से बच्चे के दृश्य नियंत्रक में ऑब्जेक्ट में मान सेट करता है)
[self.x setValue: [ [TempValues objectForKey: कुंजी] पाठ] के लिए: @ "नाम"];
क्या आप जांचते हैं कि क्या आप addObserver को कॉल करने से पहले अपने एक्स ऑब्जेक्ट को viewDidLoad () में इन्स्तांत करते हैं: के लिए केपपथ: विकल्प: संदर्भ:? आपका एक्स ऑब्जेक्ट पहले से आवंटित / आरम्भ किया जाना चाहिए।
एक मामूली विचार चूंकि संदर्भ पैरामीटर (शून्य *) के रूप में घोषित किया गया है, आपको नल (नल (नल ऑब्जेक्ट पॉइंटर), जो आईडी 0 के लिए खड़ा है, जबकि शून्य (शून्य *) 0 के लिए खड़ा है, वे दोनों एक ही बात, 0 का प्रतिनिधित्व करते हैं, लेकिन उद्देश्य सी में आपको शून्य, शून्य और शून्य के बीच भेद करना चाहिए जो एक अशक्त वर्ग सूचक को दर्शाता है)।
Comments
Post a Comment