2010-04-23 7 views
9

नहीं कहा गया है मेरे पास NSWindowController subclass का उपयोग करके एक साधारण कोको ऐप है। निब में मैं निर्धारित किया है: मेरे NSWindowController उपवर्ग NSWindowController windowDidLoad को

  • 'विंडो' निब में मुख्य NSWindow के लिए फ़ाइल के मालिक के आउटलेट से

    • फ़ाइल मालिक वर्ग।

    मेरे एनएसविंडो कंट्रोलर सबक्लास के इनिट विधि को कॉल किया जाता है (मैं सुपर कॉल करता हूं), लेकिन इससे कोई फर्क नहीं पड़ता कि मैं विंडो क्या करता हूंडिडलोड कभी नहीं कहा जाता है।

    मुझे कुछ स्पष्ट याद आना चाहिए, लेकिन मेरे जीवन के लिए मैं यह नहीं समझ सकता कि यह क्या है।

  • +0

    आप कक्षा को कैसे शुरू कर रहे हैं? क्या आप '-initWithWindowNibName:' के सुपर के कार्यान्वयन को बुला रहे हैं? –

    +0

    मेरा एनएसविंडो कंट्रोलर सबक्लास निब के भीतर तत्काल है, जैसे इस दस्तावेज़ के बारे में वार्ता: http://developer.apple.com/mac/library/documentation/cocoa/conceptual/ObjCTutorial/06Controller/06Controller.html#//apple_ref/doc/ uid/TP40000863-CH8-SW1 असल में, MainMenu.xib इसे बनाता है –

    +0

    मुझे इसी तरह की समस्या का सामना करना पड़ा: मुझे '- (शून्य) विंडोडिडलोड 'पर कॉल नहीं मिल रहा था। कुछ खोदने के बाद मुझे अपने एनएसविंडो कंट्रोलर सबक्लास में मेरी गलती मिली, मैंने संपत्ति के रूप में 'खिड़की' घोषित कर दी है।मैंने उस सदस्य को हटा दिया और खिड़की को सफलतापूर्वक प्राप्त करने के लिए 'शोविंडो:' विधि कहा। – Raviprakash

    उत्तर

    22

    आप इसे NSWindowController का उदाहरण किसी अन्य निब में तत्काल बनाकर बनाने का प्रयास कर रहे हैं। हालांकि, जब आप एक nib फ़ाइल में किसी ऑब्जेक्ट को तुरंत चालू करते हैं, तो इसे -initWithCoder: पर कॉल करके प्रारंभ किया जाता है।

    -initWithCoder:NSWindowController का नामित प्रारंभकर्ता नहीं है, इसलिए NSWindowController का आपका उदाहरण वास्तव में कभी भी अपने निब को लोड नहीं करता है।

    इसके बजाय इंटरफ़ेस बिल्डर में MainMenu.xib फ़ाइल में रखकर अपने NSWindowController उदाहरण instantiating की

    , यह प्रोग्राम के रूप में बनाने के लिए:

    AppDelegate.h में:

    @class YourWindowController; 
    @interface AppDelegate : NSObject 
    { 
        YourWindowController* winController; 
    } 
    @end 
    

    AppDelegate.m में:

    @implementation AppDelegate 
    - (void)applicationDidFinishLaunching:(NSNotification*)notification 
    { 
        winController = [[YourWindowController alloc] init]; 
        [winController showWindow:self]; 
    } 
    - (void)dealloc 
    { 
        [winController release]; 
        [super dealloc]; 
    } 
    @end 
    

    में YourWindowController.m:

    @implementation YourWindowController 
    - (id)init 
    { 
        self=[super initWithWindowNibName:@"YourWindowNibName"]; 
        if(self) 
        { 
         //perform any initializations 
        } 
        return self; 
    } 
    @end 
    
    +0

    धन्यवाद! मदद की सराहना करते हैं। –

    2

    खिड़की मांग पर लोड हो सकती है - window को अपने आप को -init में भेजने का प्रयास करें। अधिक जानकारी के लिए the discussion of -[NSWindowController loadWindow] in the documentation देखें।

    +0

    बस कोशिश की - [स्वयं खिड़की] init के दौरान शून्य है (सुपर कॉल करने के बाद भी)। मैं खुदाई रखूंगा। –

    14

    यह एक निब के माध्यम से खिड़की नियंत्रक का दृष्टांत को पूरी तरह से ठीक है। अपने हुक के रूप में windowDidLoad का उपयोग करने के बजाय, उस स्थिति में आप awakeFromNib का उपयोग करना चाहेंगे।

    +0

    बढ़िया! धन्यवाद। – ArtOfWarfare

    0

    अगर आप

    TTEst *test3 = (TTEst *)[[NSWindowController alloc] initWithWindowNibName:@"TTEst"]; 
    

    बजाय कोशिश

    TTEst *test3 = [[TTEst alloc] initWithWindowNibName:@"TTEst"]; 
    

    यह फर्क नहीं पड़ता लिखा है! बेशक पहली पंक्ति एक गलती थी ...

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