2015-07-17 5 views
6

मैं एक ऐसे मुद्दे पर आया हूं जहां मैं अपने ऐप की मुख्य विंडो, तक नहीं पहुंच सकता क्योंकि यह शून्य देता है।एनएसविंडो रिटर्न शून्य (एनएसएपीप्लिकेशन)

let window = NSApplication.sharedApplication().mainWindow 

मैंने पाया इसी तरह के सवाल:

How to get Main Window (App Delegate) from other class (subclass of NSViewController)?

लेकिन कर रही:

let window = (NSApplication.sharedApplication() as! NSArray).objectAtIndex(0) 

या तो काम करने के लिए प्रतीत नहीं होता।

क्या मुझे स्टोरीबोर्ड में गड़बड़ करना है?

अग्रिम धन्यवाद।

अद्यतन:

मैं वास्तव में ऑब्जेक्टिव-सी से बंदरगाह कुछ करने की कोशिश कर रहा हूँ।

NSWindow *mainWindow = [[[NSApplication sharedApplication] windows] objectAtIndex:0]; 
    NSLog(@"%@", mainWindow.contentViewController); 

यह एक उचित मान देता है, जब एक NSViewController में viewDidLoad() ब्लॉक में डाल दिया, तो मेरा अनुमान है कि वहाँ कुछ NSApplication.sharedApplication() साथ कुछ गड़बड़ है।

उत्तर

6

यह भी नहीं के बराबर लौटा सकते हैं या मुख्य एप्लिकेशन विंडो MacOS पर सक्रिय नहीं है। उदाहरण के लिए जब मैं ड्रैग और ड्रॉप फ़ाइल अपलोडर बना रहा था तो मैं इसमें भाग गया। अगर खिड़की सामने नहीं थी (ऑपरेटिंग सिस्टम पर) तो यह शून्य वापस आ जाएगी। कोड अपने एप्लिकेशन को सक्रिय कर देंगे की निम्न पंक्ति (सामने लाने के लिए)

NSApp.activateIgnoringOtherApps(true) 

मैं भी एक टाइमर की जरूरत मेरे मामले में MainWindow की मेरी कॉल देरी करने के लिए।

1

the docs से:

इस संपत्ति में मूल्य nil है ही एप्लिकेशन स्टोरीबोर्ड या निब फ़ाइल अभी तक समाप्त लोड हो रहा है नहीं है। यह ऐप निष्क्रिय या छुपा होने पर nil भी हो सकता है।

तो, यह परिस्थितियों के आधार पर होने वाली पूरी तरह से सामान्य बात है।

+0

उत्तर देने के लिए धन्यवाद। मैं देखने के लिए एक मान सेट करने की कोशिश कर रहा हूं जब दृश्य 1 के लिए तालिका कक्ष टैप किया गया है। तो, यह लोडिंग समाप्त होने वाला माना जाता है। यह क्यों होगा? –

+1

क्या आपकी खिड़की मुख्य खिड़की है? यदि यह एक 'एनएसपीनेल' है तो यह तब तक मुख्य होने से इंकार कर देता है जब तक कि आप सचमुच वापस आने के लिए 'canBecomeMainWindow() 'ओवरराइड नहीं कर लेते। इसी तरह, यदि इसमें कोई शीर्षक पट्टी नहीं है और आकार बदलने योग्य नहीं है, तो यह मुख्य बनने से इंकार कर देगा। –

+1

मेरे 'प्रारंभिक नियंत्रक' के रूप में, 'NSWindow 'के साथ' NSWindowController' सेट है। 'NSWindow' में एक शीर्षक पट्टी है, और आकार बदलने योग्य है। मुझे 'एनएसपीनेल' के बारे में निश्चित नहीं है ... मैंने कभी भी अपने कोड में इसका उपयोग नहीं किया है। –

1

आप इस के बजाय कर सकता है:

func applicationDidBecomeActive(notification: NSNotification) { 

     NSApplication.sharedApplication().mainWindow?.movable = false 
    } 
संबंधित मुद्दे