टीएल; डीआर:
सभी यूआई जोड़तोड़ समस्याओं से बचने के लिए मुख्य थ्रेड में किया जाना चाहिए। यदि ऐसा करने में विफल रहा, तो मेन थ्रेड चेकर (XCode 9 में नई शुरू की गई डिबगिंग सुविधा) रनटाइम पर मुद्दों का उत्पादन करेगा। इसलिए ग्लिस और रनटाइम चेतावनियों से बचने के लिए अपने कोड को मेन थ्रेड ब्लॉक में लपेटें।
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
Ver से पहले Xcode में रिलीज़ होती है। 9, मुख्य धागे से संबंधित चेतावनियाँ सांत्वना क्षेत्र में पाठकीय रूप से छपी होंगी। वैसे भी, आप वैकल्पिक रूप से एडिट स्कीम में डायग्नोस्टिक सेटिंग्स में मेन थ्रेड चेकर को डिसेबल नहीं कर सकते हैं ।
स्पष्टीकरण:
Apple ने UCit के लिए रनटाइम पर मुद्दों की जाँच के लिए XCode 9 में एक नया डिबगिंग विकल्प पेश किया और यूआई के अन्य तत्वों में हेरफेर किया। यदि मेन थ्रेड ब्लॉक के बिना रनटाइम पर यूआईआईटी एपीआई से यूआई तत्वों में कोई बदलाव होता है, तो यह यूआई ग्लिच और क्रैश का कारण होने की संभावना है। मुख्य थ्रेड परीक्षक कार्यावधि में उन मुद्दों को पकड़ने के लिए डिफ़ॉल्ट रूप से सक्षम है। आप नीचे दी गई तरह एडिट स्कीम विंडो में मेन थ्रेड चेकर को निष्क्रिय कर सकते हैं , हालाँकि ऐसा करने की वास्तव में सिफारिश नहीं की गई है:
यदि आपके पास कोई पुराना एसडीके या फ्रेमवर्क है, तो Xcode 9 को अपडेट करते समय, आपको इस चेतावनी का सामना करना पड़ सकता है क्योंकि कुछ UIKit विधि कॉल मेन थ्रेड में लपेटी नहीं गई होंगी। उन्हें नवीनतम संस्करण में अद्यतन करने से समस्या ठीक हो जाएगी (यदि डेवलपर को इसके बारे में पता है और इसे ठीक कर दिया गया है)।
XCode 9 बीटा रिलीज़ नोट से उद्धरण:
- Xcode 9 में नया - मुख्य थ्रेड चेकर।
- पृष्ठभूमि थ्रेड से UI API के दुरुपयोग का पता लगाने में सक्षम करें
- AppKit, UIKit और WebKit विधि कॉल का पता लगाता है जो मुख्य धागे पर नहीं बनाई गई हैं।
- डिबगिंग के दौरान स्वचालित रूप से सक्षम है, और योजना संपादक के नैदानिक टैब में अक्षम किया जा सकता है।
- मुख्य थ्रेड चेकर स्विफ्ट और सी भाषाओं के साथ काम करता है।
UIApplication.shared.registerForRemoteNotifications()
मुख्य धागे में लपेटना होगा । :) Google को इसे मुख्य सूत्र में कैसे कॉल करें ...