2013-07-30 6 views
5

हाय फ़ाइल मैं एक ऐसी पुस्तक पढ़ रहा हूं जहां मुझे ऐसी स्थिति से निपटना पड़ा। मैंने HeaderView.xib. नामक एक एक्सआईबी फ़ाइल बनाई है, फिर मैंने इस XIB फ़ाइल ItemsViewController पर File Owner को जोड़ा। सब अभी तक ठीक है। मैंने XIB पर विचारों के साथ 0Vआइटम व्यू कंट्रोलर के कुछ आउटलेट भी कनेक्ट किए हैं।एक xib फ़ाइल

- (UIView *)headerView 
{ 
    // If we haven't loaded the headerView yet... 
    if (!headerView) { 
     // Load HeaderView.xib 
     [[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:self options:nil]; 
    } 

    return headerView; 
} 

ऊपर संहिता इसी (एक मैं XIB पर साथ कनेक्शन बना XIB फ़ाइल पर देखने के लिए headerViewItemsViewController बिंदु के आउटलेट स्थापित करेगा:

अब, ItemsViewController में मैं इस तरह के कोड को कॉल करने के लिए किया था फ़ाइल)। मेरा सवाल है, मुझे क्यों करना है, दो बार, मालिक निर्दिष्ट करें? (उदाहरण के लिए, एक बार XIB में जैसा कि मैंने इस बंदरगाह की शुरुआत में उल्लेख किया है, और दूसरी बार, कोड में ऊपर, उदाहरण के लिए, owner: self)।

उत्तर

6

आप फ़ाइल मालिक दो बार निर्दिष्ट नहीं किया है:

  • पहली बार (XIB फ़ाइल में) आप फ़ाइल स्वामी की प्रकार निर्दिष्ट; इंटरफ़ेस बिल्डर के लिए यह जानना आवश्यक है कि यह कौन से आउटलेट कनेक्ट कर सकता है।
  • दूसरी बार (उद्देश्य सी कोड में) आपने मालिक के इंस्टेंस निर्दिष्ट किए हैं। आउटलेट को कनेक्ट करने वाले ऑब्जेक्ट को जानने के लिए रनटाइम पर यह आवश्यक है।
+0

dasblinkenlight, तो मुझे आपसे ऐसा प्रश्न पूछने दो। अगर मैंने कुछ XIB के फ़ाइल स्वामी को ViewController पर सेट किया है। और फिर (XIB में) XIB फ़ाइल में कुछ दृश्य में ViewController के व्यू आउटलेट को कनेक्ट करें। तब मुझे बस उस मामले में करना है। मेरे पास आमतौर पर कोड में ऊपर के रूप में कॉल करने के लिए नहीं है। क्यों यह है? (ऐसा इसलिए है क्योंकि कहीं भी स्वचालित रूप से लोड होता है NibNamed ViewController के दृश्य के मामले में बुलाया जाता है?)? – user2054339

+0

@ user2054339 XIB को पूर्ण रूप से लोड करने के अन्य तरीके हैं - उदाहरण के लिए, यदि आपका व्यू कंट्रोलर 'initWithNibName' का उपयोग करके तत्काल है, तो' loadNibNamed: 'विधि को कॉल करने की आवश्यकता नहीं है। – dasblinkenlight

+0

@ dasblinkenlight: हाँ, मैंने इसका परीक्षण किया है बस एक ViewController जोड़ा। फिर एक एक्सआईबी फ़ाइल। XIB फ़ाइल के फ़ाइल स्वामी को मेरे ViewController पर सेट करें। फिर, XIB में XIB में मेरे दृश्य में XIB कनेक्ट व्यू आउटलेट में कनेक्ट आउटलेट में।और दृश्य स्वचालित रूप से लोड हो जाता है, लोडनिब नामित करने की कोई ज़रूरत नहीं है ... मुझे लोडनिब नामित करना है, जाहिर है क्योंकि यह एक अलग आउटलेट है .. विभिन्न वर्ग TableViewController के लिए भी ... – user2054339

3

एक्सआईबी में मालिक को निर्दिष्ट करना एक्सकोड को बताता है कि नियंत्रक क्या समझता है (इसमें क्या आउटलेट है) ताकि यह आपके लिए कनेक्शन प्रदान कर सके। यह एक वर्ग स्तर पर है।

कोड में मालिक को निर्दिष्ट करना अनारक्षित प्रक्रिया बताता है कि नियंत्रक का उदाहरण वास्तव में उस भूमिका को पूरा करने जा रहा है और इसलिए नए उदाहरणों (ओं) में स्थापित कनेक्शन होना चाहिए जो एनआईबी से अनारक्षित हैं।

0

मुझे मिल गया ... दुनिया XIB (रों) अब और का उपयोग नहीं किया जाता है तो ... ओपन अपने पसंदीदा पाठ संपादक में XIB या नोक फ़ाइल

तुम वहाँ इस लाइन मिल जाएगा ...

 <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MyCalssName"> 

कक्षा का नाम बदलें, फ़ाइल को सहेजें और आपकी फ़ाइल के मालिक को बदल दिया जाएगा। सावधानी: एक्सकोड बंद करें (परिवर्तनों को स्वत: पुनः लोड करने के लिए) और यदि आप कुछ गड़बड़ करते हैं तो बैकअप लें।

संबंधित मुद्दे