2016-10-06 9 views
5

didFinishLaunchingWithOptions नहीं कहा जाना चाहिए जब ऐप पहली बार चल रहा है? मैंने इस विधि पर ब्रेकपॉइंट सेट किया है और जब मैं सिम्युलेटर में ऐप चलाता हूं तो ब्रेकपॉइंट हिट नहीं होता है, जिसका अर्थ है कि विधि को कॉल नहीं किया जाता है। जब भी ऐप लॉन्च होता है तो मैं UserDefaults से कुछ डेटा लोड करने का प्रयास कर रहा हूं, लेकिन इसे पूरी तरह से अनदेखा किया जा रहा है। एक बात मैंने देखी है कि यह func के बजाय डिफ़ॉल्ट रूप से private func है। अगर मैं private से छुटकारा पाता हूं, तो मुझे एक चेतावनी मिलती है कि "UIAplplicationDelegate में लगभग समान वैकल्पिक आवश्यकता है"। क्या कोई मुझे बता सकता है कि इसका क्या अर्थ है और private func को अनदेखा किए जाने वाले तरीके से क्या करना है या नहीं? जब मैं सिम्युलेटर में अपना ऐप चलाता हूं तो क्या यह विधि भी कॉल की जानी चाहिए? यदि नहीं, तो मेरे ऐप लॉन्च होने के बाद डेटा को पुनर्प्राप्त किए जाने पर मैं कैसे परीक्षण कर सकता हूं? AppDelegate में अन्य सभी विधियों को सामान्य रूप से कॉल किया जाता है (उदाहरण के लिए, applicationDidEnterBackground विधि पूरी तरह ठीक काम करती है)।निजी func didFinishLaunchingWithOptions नहीं कहा जा रहा है? (स्विफ्ट 3)

उत्तर

14

अपने विधि हस्ताक्षर निकाल लें और Xcode स्वत: पूर्ण कर यह

मैं भी समस्या यह है कि AppDelegate में मेरी didFinishLaunchingWithOptions विधि नहीं कहा जा होता था की है। मेरा कार्य भी निजी चिह्नित किया गया था और यह

private func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 

समस्या यह है कि यह पुराना वाक्यविन्यास है! स्पष्ट रूप से मेरे लिए जब मैंने अपनी परियोजना को स्विफ्ट 2.x से स्विफ्ट 3 एक्सकोड में परिवर्तित किया, तो ऐपडिलेगेट में विधियों को परिवर्तित नहीं किया। नई वाक्य रचना इस

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool 
+0

क्षमा करें, मैंने वास्तव में कुछ समय पहले इस मुद्दे को ठीक किया था। उत्तर के रूप में इस प्रश्न को चिह्नित करने के लिए भूल गए। इस समस्या को ठीक करने के लिए, मुझे इस विधि के शब्दकोश पैरामीटर के मान के रूप में 'AnyObject' को' Any' 'से बदलना पड़ा था। यह वास्तव में अजीब है कि आप अभी भी स्विफ्ट 3 में 'AnyObject' को कॉल कर सकते हैं, भले ही उस वर्ग का नाम बदलकर 'Any' कर दिया गया हो और पूरी तरह से बहिष्कृत हो। लेकिन उन प्रकार के वर्गों के कुछ अन्य उदाहरण भी हैं, 'AnyObject' केवल एकमात्र नहीं है। –

+0

वही है जो मैं कहने की कोशिश कर रहा था। विधि हस्ताक्षर किसी भी ऑब्जेक्ट से किसी भी में बदल गया है, इसलिए AnyObject के साथ आपकी विधि को 'didFinishLaunching' विधि – Yannick

+0

के रूप में पहचाना नहीं गया था, यह बहुत पागल है कि रूपांतरण इस फ़ंक्शन को परिवर्तित करने में विफल रहता है और इसके परिणामस्वरूप इसे नहीं कहा जा रहा है .... – jarryd

2

क्या आपने में से किसी एक में didFinishLaunchingWithOptions लागू किया है? इस विधि के कस्टम कार्यान्वयन के लिए कोई कॉल नहीं मिलेगा। इस विधि को ApplicationDelegate में परिभाषित किया गया है और ऐप लॉन्च होने के बाद इसे हमेशा कॉल किया जाएगा। यदि आपने किसी भी ViewController में विधि को फिर से परिभाषित नहीं किया है और AppDelegate में से एक को नहीं कहा जा रहा है, तो सिम्युलेटर को रीसेट करने का प्रयास करें। सिम्युलेटर मेनू Simulator -> Reset content and settings से।

यदि कंपाइलर didFinishLaunchingWithOptions विधि को निजी बनाने के लिए संकेत देता है तो विधि का पैरामीटर त्रुटि उत्पन्न कर सकता है। एप्लिकेशन का पैरामीटर (_: didFinishLaunchingWithOptions :) प्रतिनिधि विधि अब [NSObjectLaunchOptionsKey: Any] ?, [NSObject: AnyObject] की बजाय स्विफ्ट को ब्रिज किया गया है? तो दिखाए गए विधि हस्ताक्षर को संशोधित करें।

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
// ... 
} 
+0

सामग्री और सेटिंग्स को रीसेट की कोशिश की, काम नहीं किया। और नहीं, मैंने कहीं और विधि को लागू नहीं किया है, मुझे पता है कि यह बेकार है, क्योंकि यह एक प्रतिनिधि विधि है।मुझे अभी भी लगता है कि जब मैं विधि कॉल के सामने 'निजी' से छुटकारा पाता हूं तो मुझे चेतावनी के साथ कुछ करना पड़ता है। या कम से कम यह 'निजी' कथन हो सकता है जो रनटाइम पर विधि को अनदेखा कर सकता है? –

+0

संपादित एक को आजमाएं – Mathews

0

इस विधि ApplicationDelegate में परिभाषित किया गया है और यह हमेशा एक बार एप्लिकेशन शुरू की है बुलाया जाएगा। यदि आपने किसी भी ViewController में विधि को फिर से परिभाषित नहीं किया है और AppDelegate में से एक को नहीं कहा जा रहा है, तो सिम्युलेटर को रीसेट करने का प्रयास करें।

ओपन सिम्युलेटर -> मेनू सिम्युलेटर -> सामग्री और सेटिंग्स रीसेट करें।

-(BOOL)application(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
//.. 
} 
2

स्विफ्ट ~ के लिए की तरह लग रहा 3.0 didFinishLaunchingWithOptions साथ बदलें follwing हस्ताक्षर

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { 
} 
संबंधित मुद्दे