परिचय: आपका UIAlertView क्यों काम नहीं कर रहा (और इसमें Stack Overflow का क्या रोल है)
\n\nअगर आपने कभी गूगल पर सर्च किया है "How would I create a UIAlertView in Swift?" — तो आप अकेले नहीं हैं। Stack Overflow पर इस सवाल को लाखों बार देखा जा चुका है। लगता है कि इससे आसान क्या हो सकता है? यूज़र को एक पॉप-अप दिखाना जिसमें "OK" बटन हो। लेकिन असल में, शुरुआती (और अनुभवी) डेवलपर्स भी अक्सर एक ही गलतियाँ दोहराते हैं।
\n\nइस आर्टिकल में हम Swift में UIAlertView बनाते समय टॉप-5 गलतियाँ और उन्हें ठीक करने का तरीका बताएँगे। साथ ही, UIAlertController के लिए तैयार कोड देंगे — जो पुराने API का आधुनिक विकल्प है। अगर आप बिना क्रैश के क्लीन और काम करने वाला कोड लिखना चाहते हैं, तो हमारे साथ बने रहें।
\n\nगलती #1: UIAlertView का इस्तेमाल करना (UIAlertController के बजाय)
\n\nसबसे आम गलती है आधुनिक Swift में UIAlertView को कॉल करना। यह क्लास iOS 8 से ही deprecated (पुराना) घोषित कर दी गई थी। अगर आप यह लिखते हैं:
let alert = UIAlertView(title: "त्रुटि", message: "कुछ गलत हो गया", delegate: nil, cancelButtonTitle: "OK")\nalert.show()\n\n…तो कंपाइलर शायद चेतावनी या एरर देगा। और अगर प्रोजेक्ट बिल्ड हो भी गया — तो iOS 13+ पर अलर्ट सही से काम नहीं करेगा।
\n\nऐसा क्यों होता है?
\nApple ने UIAlertView को iOS 8 में ही UIAlertController से बदल दिया था। पुराना क्लास अब सपोर्टेड नहीं है, और इसके इस्तेमाल से अनपेक्षित व्यवहार हो सकता है।
इसे कैसे ठीक करें?
\nUIAlertController का इस्तेमाल करें जिसमें .alert या .actionSheet स्टाइल हो। सही कोड यह है:
let alert = UIAlertController(title: "त्रुटि",\n message: "कुछ गलत हो गया",\n preferredStyle: .alert)\nalert.addAction(UIAlertAction(title: "OK", style: .default))\npresent(alert, animated: true)\n\nयाद रखें: आधुनिक Swift में UIAlertView पुराना (legacy) है। हमेशा UIAlertController का उपयोग करें।
गलती #2: present() को कॉल करना भूल जाना
\n\nभले ही आपने UIAlertController बना लिया हो, लेकिन अगर उसे दिखाना भूल गए — तो कुछ नहीं होगा। सचमुच। कोड तो चलेगा, अलर्ट मेमोरी में बन जाएगा, लेकिन यूज़र उसे देख नहीं पाएगा।
गलती का सामान्य उदाहरण:
\n\nfunc showAlert() {\n let alert = UIAlertController(title: "नमस्ते", message: "दुनिया", preferredStyle: .alert)\n alert.addAction(UIAlertAction(title: "OK", style: .default))\n // present() कॉल करना भूल गए!\n}\n\nनतीजा: कुछ नहीं। न कोई एरर, न कोई अलर्ट। आप सोचते रह जाएँगे कि कोड क्यों काम नहीं कर रहा।
\n\nइसे कैसे ठीक करें?
\nहमेशा मौजूदा view controller पर present(_:animated:completion:) कॉल करें:
func showAlert() {\n let alert = UIAlertController(title: "नमस्ते", message: "दुनिया", preferredStyle: .alert)\n alert.addAction(UIAlertAction(title: "OK", style: .default))\n present(alert, animated: true, completion: nil)\n}\n\nसुझाव: अगर आप क्लोजर या async कोड से अलर्ट कॉल कर रहे हैं, तो सुनिश्चित करें कि self (view controller) अभी भी मौजूद है। वरना क्रैश हो सकता है।
गलती #3: बटन दबाने की गलत हैंडलिंग
\n\nपुराने UIAlertView में हम डेलिगेट alertView(_:clickedButtonAt:) का इस्तेमाल करते थे। UIAlertController में यह अलग है — यहाँ क्लोजर (closures) का उपयोग होता है।
शुरुआती लोग अक्सर क्लास को UIAlertViewDelegate पर सब्सक्राइब करने और डेलिगेट मेथड्स को लागू करने की कोशिश करते हैं, लेकिन यह UIAlertController के साथ काम नहीं करेगा।
गलत तरीका:
\n\nclass ViewController: UIViewController, UIAlertViewDelegate {\n func showAlert() {\n let alert = UIAlertController(title: "सवाल", message: "क्या आप सहमत हैं?", preferredStyle: .alert)\n alert.addAction(UIAlertAction(titl