2011-06-22 12 views
12

मुझे समझना है कि अगर मैं किसी ऑब्जेक्ट (जैसे एनएसबटन) के लिए मूल्य (आईई सेट एल्फा वैल्यू या सेटटाइट) सेट करने का प्रयास करता हूं तो कुछ भी नहीं होता है, लेकिन अगर मैं जागने में सेटर फ़ंक्शन को कॉल करता हूं तो यह सही तरीके से काम करता है।init और awakeFromNib

@interface appController : NSObject { 
    NSButton *btn; 
} 
@end; 

@implementation appController 
-(void)awakeFromNib { 
    //it works 
    [btn setTitle:@"My title"]; 
} 

-(id)init { 
    self = [super init]; 
    if(self){ 
     //it doesn't works 
     [btn setTitle:@"My title"]; 
    } 
} 
@end 
+0

क्या आपका बटन आईबीओलेट है? तेजी से और लंबे होने के लिए – Eimantas

उत्तर

37

दुकानों-awakeFromNib से पहले-init और के बाद सेट कर रहे हैं। यदि आप आउटलेट एक्सेस करना चाहते हैं, तो आपको -awakeFromNib में ऐसा करना होगा या आउटलेट सेट होने के बाद निष्पादित की गई एक अन्य विधि (उदा। -[NSWindowController windowDidLoad])।

जब एक निब फ़ाइल लोड किया जाता है: निब फ़ाइल में

  1. वस्तुओं आवंटित किए जाते हैं/initialised, या तो -init, -initWithFrame:, या -initWithCoder:
  2. सभी कनेक्शन पुन: स्थापित कर रहे हैं प्राप्त करते हुए। इसमें क्रियाएं, आउटलेट और बाइंडिंग शामिल हैं।
  3. -awakeFromNib इंटरफ़ेस ऑब्जेक्ट्स, फ़ाइल के मालिक और प्रॉक्सी ऑब्जेक्ट्स को भेजा जाता है।

आप Resource Programming Guide में निब लोडिंग प्रक्रिया के बारे में अधिक पढ़ सकते हैं।

+1

+1। :) – Eiko

+0

धन्यवाद! सही उत्तर (मुझे इसे स्वीकार करने के लिए कुछ और मिनटों की प्रतीक्षा करनी है :)) – MatterGoal

+3

मैं इसे जोड़ना चाहता हूं: "जिस क्रम में निब-लोडिंग कोड जागृत करता है, ऑब्जेक्ट की जागरूकता विधि की गारंटी नहीं है। ओएस एक्स में, कोको की कोशिश करता है फाइल के मालिक की जागृत FromNib विधि को कॉल करें, लेकिन उस व्यवहार की गारंटी नहीं देता है। अगर आपको लोड समय पर अपनी निब फ़ाइल में ऑब्जेक्ट्स को कॉन्फ़िगर करने की आवश्यकता है, तो ऐसा करने का सबसे उचित समय आपके निब-लोडिंग कॉल रिटर्न के बाद होता है। उस बिंदु पर , सभी वस्तुओं को बनाया, शुरू किया, और उपयोग के लिए तैयार हैं। " इस जवाब में संसाधन प्रोग्रामिंग गाइड से। –

5

जब init में, दृश्य ठीक से स्थापित नहीं किया जाएगा, और आउटलेट कनेक्ट नहीं हैं। यही कारण है कि आप इस मामले में awakeFromNib: का उपयोग करते हैं - सबकुछ स्थापित है और उपयोग करने के लिए तैयार है।

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