2012-09-19 42 views
5

मैंने एक्सकोड टेम्पलेट का उपयोग करके एक नया खाली मानक एप्लिकेशन बनाया है। मेनमेनू.एक्सिब में विंडो को हटा दिया और मैंने एक xib के साथ एक नया अनुकूलित NSWindowController उपclass बनाया।मानक एप्लिकेशन में विंडो दिखाने के लिए NSWindowController का उपयोग कैसे करें?

उन्हें "WYSunFlowerWindowController.h" और "WYSunFlowerWindowController.m" नाम दिया गया था।

और मैं तो संलग्न नीचे की तरह init समारोह:

- (id)init 
{ 
    NSLog(@"init()"); 

    return [super initWithWindowNibName:@"WYSunFlowerWindowController" owner:self]; 
} 

और मेरे WYAppDelegate.m फ़ाइल नीचे की तरह है:

static WYSunFlowerMainWindowController* windowController = nil; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    // Insert code here to initialize your application 
    if (windowController == nil) { 
     windowController = [[WYSunFlowerMainWindowController alloc] init]; 
    } 
    [[windowController window] makeKeyAndOrderFront:windowController]; 
} 

और मैं समस्या है, उस खिड़की नहीं दिखा सकते हैं ऐप लॉन्च करने के बाद यह स्वयं। कोई मुझे बता सकता है क्यों? क्या मेरे कोड में कुछ गलत है?

मैं उद्देश्य-सी और कोको में नौसिखिया हूं। तो मुझे लगता है कि मैं शायद एक मूर्खतापूर्ण गलती करूँगा कि मैं इसे अपने आप से नहीं समझ सकता।

अद्यतन:

यहां मेरा प्रोजेक्ट स्रोत है। दलीलों एक नजर है और मेरी मदद करो यह पता लगाने की मेरी गलती क्या है।

https://dl.dropbox.com/u/3193707/SunFlower.zip

+0

क्या आपके पास एआरसी सक्षम है? मैंने पाया है कि एआरसी के साथ विंडो नियंत्रक को तब तक हटा दिया जाता है जब तक कि मैं इसे ऐप प्रतिनिधि की संपत्ति नहीं बना देता (मुझे यकीन है कि ऐसा करने के अन्य तरीके हैं)। – sosborn

+0

मैं एआरसी का उपयोग कर रहा हूं। मैं विंडो नियंत्रक को AppDelegate क्लास के एक स्थिर क्षेत्र के रूप में बना देता हूं। मुझे लगता है कि ऐप समाप्त होने तक इसे हटाया नहीं जाएगा। – morphinewan

उत्तर

2

अपने init विधि में, मुझे लगता है कि आप सुपर init पहले करने के लिए स्वयं स्थापित करने के लिए इससे पहले कि आप लौट स्वयं की है।

-(id)init 
{ 
    NSLog (@"init()"); 
    self = [super initWithWindowNibName:@"WYSunFlowerWindowController" owners:self]; 
    return self; 
} 

संपादित:

[windowController showWindow:self]

साथ makeKeyAndOrderFront: की जगह की कोशिश करो तो यह है कि यदि अभी भी काम नहीं करता है, अपने विंडो नियंत्रक xib जाँच, सुनिश्चित करें कि फ़ाइल मालिक WYSunFlowerWindowController करने और उस पर सेट है आईबीओटलेट विंडो (एनएसविंडो कंट्रोलर में घोषित) खिड़की से जुड़ा हुआ है।

संपादित करें 2:

अपने @property और अपने नियंत्रक में @synthesize खिड़की से बाहर टिप्पणी करते चाल थी। एक सुपरक्लास में पहले से ही पूर्वनिर्धारित होने वाले सेट और सेटर्स को दोबारा शुरू न करें।

+0

आपकी मदद के लिए धन्यवाद। मैंने आपके निर्देश का पालन किया और कुछ भी नहीं बदला। अभी भी काम नहीं करते हैं। – morphinewan

+0

मैंने आपके द्वारा उल्लेखित सभी किया है। काम नहीं। मुझे कोई फर्क नहीं पड़ता कि आप मेरे प्रोजेक्ट स्रोत को देखने के लिए डाउनलोड कर सकते हैं? https://dl.dropbox.com/u/3193707/SunFlower.zip – morphinewan

+0

हे भगवान, यह काम करता है! बहुत बहुत धन्यवाद। लेकिन मैं उलझन में हूं कि उपclass में परिभाषित एक खिड़की आउटलेट संपत्ति क्यों इस समस्या का कारण बन जाएगी? क्या वे कक्षा के माता-पिता की एक ही संपत्ति को ओवरराइड नहीं कर सकते? – morphinewan