Sunday 15 March 2015

ios - About @selector and MVC -


मेरे पास क्या है:

  • चार तालिका दृश्य नियंत्रक (ए, बी, सी, डी) - जो चार श्रेणी की सामग्री दिखाएगा
  • UITabBarController पर आधारित नकली TabBarController, यह ठीक काम करता है।

    मुझे क्या करना है:

    ATableView पर एक बटन जोड़ें, और यह मेरे FakeTabBarController पर एक विधि का उपयोग करें (क्योंकि मैं विधि साझा करना चाहता हूं ताकि मैं इसे BTableViewController, CTableViewController पर दो या तीन बार डुप्लिकेट करने के बजाय उपयोग कर सकूं)

    इसलिए मैं केवल विधि को सार्वजनिक करता हूं (पर। एच फाइल), और मेरे ATableViewController में .h फाइल शामिल है। इसके बाद, addTarget: action: के लिए नियंत्रण ईवेंट्स: हमेशा की तरह, लेकिन .. यह काम नहीं करता, कृपया मदद करें!

    त्रुटि:

      [ATableViewController assisitantButtonPressed]: अपरिचित चयनकर्ता उदाहरण के लिए भेजा गया 0x715a8d0 *** बिना अपवाद अपवाद के कारण एटीएम को रद्द करना 'एनएसआईएनआईडीएडीएआरएग्रामेंट अपवाद', कारण: '- [ATableViewController assisitantButtonPressed:]: अपरिचित चयनकर्ता को उदाहरण 0x715a8d0' *** भेजा गया 0x26258 0xe7021 0xe757f 0xe66e8 0x2ea1d3 0x1c69afe 0x1c69a3d 0x1c477c2 0x1c46f44 0x1c46e1b 0x1bfb7e3 0x1bfb668 0x22ffc 0x1c8d 0x1bb5) libc ++ abi.dylib: समाप्त एक अपवाद फेंक  कहा जाता है  

    FakeTabBarController.h:

      #import & lt; UIKit / UIKit.h & gt; @ इंटफेस कस्टमटबबर कंट्रोलर: यूआईटीबीबीआर कंट्रोलर - (आईबीएसीएडी) एडिशिटंटबटनॉनडड: (यूआईबुटन *) प्रेषक; @End   

    FakeTabBarController.m: <प्री> ... - (IBAction) assisitantButtonPressed: (UIButton *) प्रेषक {स्विच ([प्रेषक टैग]) { मामला 0: // एए एनएसएलॉग (@ "एए"); टूटना; केस 1: // बीबी एनएसएलॉग (@ "बीबी"); टूटना; डिफ़ॉल्ट: ब्रेक; }} ...

    ATableViewController.m: <पूर्व> #import "ATableViewController.h" #import "ATableCell.h" #import "FakeTabBarController.h "... - (शून्य) दृश्यडिडलोड {[सुपर व्यूडिडलोड]; UIImage * AAImage = [UIImage imageNamed: @ "search.png"]; UIButton * AAButton = [[UIButton alloc] initWithFrame: CGRectMake (self.view.frame.size.width * 0.73, 0, एआइमेज.size.width, AAImage.size.height)]; [एबटटन सेटटैग: 0]; [एबटटन सेट इमेज: स्टेटमेंट के लिए खोज इमेज: यूआईसीओन्टोलस्टेटअनैरल]; [एबूटन एड-लक्षित: स्वयं एक्शन: @ सिलेक्टर (एसिसेटट बटटनप्रेस :) कंट्रोल ईवेंट्स के लिए: यूआईकंट्रोलइवेंटटीउचअप इनसाइड]; [Self.view addSubview: AAButton]; }

    यह पंक्ति

      [AAButton addTarget: स्वयं कार्रवाई: @ सिलेक्टर (एडीसिटंट बटटनप्रेस :) कंट्रोल ईवेंट्स: यूआईकंट्रोलएवेंट टचअप इनसाइड];   

    विधि assisitantButtonPressed: का स्वयं , जो ATableViewController है, के लक्ष्य निर्धारित करता है। यह अपवाद फेंकता है क्योंकि ATableViewController उस विधि में नहीं है सही तरीके से कमजोर संपत्ति को ATableViewController को जोड़ने के लिए CustomTabBarController और addTarget को उस टैबबार में जोड़ने के लिए है , स्वयं के बजाय <पूर्व> @ इंटरफेस एटेबल वीआईयूआई नियंत्रक @ प्रॉपर्टी (कमजोर, नॉनैटॉमिक) कस्टमटबैर कंट्रोलर * टैबबार; ... @end @ कार्यान्वयन ATableViewController - (शून्य) दृश्यडिडलोड {[सुपर व्यूडिडलोड]; Self.tabbar = & lt; आपको किसी भी तरह से टैब बार संदर्भ प्राप्त करना होगा, या तो यहाँ या init & gt; ... [AAButton addTarget: self.tabBar कार्रवाई: @ सिलेक्टर (assisitantButtonPressed) के लिए कंट्रोलइवेंट: UIControlEventTouchUpInside]; ...} @end

    यह अच्छा है कि आप कोड दोहराव से बचने का प्रयास कर रहे हैं। हालांकि जब से ATableViewController , BTableViewController , बहुत समान हैं (अपने प्रश्न और उनके नामकरण से पहचानने), आप केवल एक एकल TableViewController लेकिन अलग वास्तविक डेटा के साथ। इसके अलावा, यदि विधि assisitantButtonPressed: वास्तव में संबंधित तालिका दृश्य नियंत्रक में है और आप इसे navbar में बस कोड दोहराव से बचने के लिए पर ले जाया गया है, यह < Em> है एक बहुत बुरा अभ्यास है।

No comments:

Post a Comment