iOS में स्क्रीन के बीच डेटा ट्रांसफर: पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

iOS में स्क्रीन के बीच डेटा ट्रांसफर: शुरुआत से विशेषज्ञ तक

\n\n

जिसने भी iOS के लिए कोडिंग शुरू की, वह देर-सबेर एक दीवार से टकराया: "मैं दूसरी स्क्रीन पर एक स्ट्रिंग, ऐरे या ऑब्जेक्ट कैसे भेजूं?" यह सवाल इतना लोकप्रिय है कि Stack Overflow पर इसके हज़ारों व्यू और दर्जनों जवाब हैं। और यह कोई संयोग नहीं है — iOS की आर्किटेक्चर इस तरह बनी है कि हर स्क्रीन (ViewController) अपनी जिंदगी जीती है, और उनके बीच डेटा को जानबूझकर ट्रांसफर करना पड़ता है।

\n\n

इस लेख में हम Swift पर view controllers के बीच डेटा ट्रांसफर करने के 5 मुख्य तरीकों पर चर्चा करेंगे। आप जानेंगे कि कब segue का उपयोग करना है, और कब delegates या closures का, और क्यों NotificationCenter हमेशा बुरा नहीं है। चलिए शुरू करते हैं!

\n\n

यह समस्या क्यों है?

\n

iOS सख्त MVC (Model-View-Controller) आर्किटेक्चर का उपयोग करता है। प्रत्येक ViewController अपने स्क्रीन के हिस्से के लिए जिम्मेदार है और पड़ोसी कंट्रोलर के डेटा तक सीधी पहुंच नहीं रखता। यह सुरक्षा और मॉड्यूलरिटी के लिए किया गया है, लेकिन डेवलपर के लिए इसका मतलब है कि डेटा को बिंदु A से बिंदु B तक स्पष्ट रूप से "खींचना" होगा।

\n\n

कल्पना करें: आपके पास उपयोगकर्ताओं की एक सूची है, और आप एक सेल पर क्लिक करने पर विस्तृत जानकारी दिखाना चाहते हैं। आप क्लिक करते हैं — एक नई स्क्रीन खुलती है। उपयोगकर्ता ID कैसे ट्रांसफर करें? यहीं से जादू शुरू होता है।

\n\n

तरीका 1: Storyboard Segue के माध्यम से डेटा ट्रांसफर (सबसे आसान)

\n

सबसे सीधा तरीका prepare(for:sender:) का उपयोग करना है। आप ट्रांज़िशन से पहले डेटा तैयार करते हैं। सरल ऐप्स और प्रोटोटाइप के लिए आदर्श।

\n\n
// मूल ViewController में\noverride func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n    if segue.identifier == "showDetail" {\n        guard let destinationVC = segue.destination as? DetailViewController else { return }\n        destinationVC.userID = 42 // संख्या ट्रांसफर करें\n        destinationVC.userName = "Анна" // स्ट्रिंग ट्रांसफर करें\n    }\n}\n\n// DetailViewController में\nvar userID: Int = 0\nvar userName: String = ""\n
\n\n

लाभ: न्यूनतम कोड, सब कुछ एक जगह। नुकसान: Storyboard से कठोर जुड़ाव, परीक्षण करना मुश्किल, आइडेंटिफ़ायर में भ्रम हो सकता है।

\n\n

तरीका 2: प्रोग्रामेटिक नेविगेशन डेटा ट्रांसफर के साथ (उन्नत स्तर)

\n

जब आप segues से थक जाते हैं और कोड से सब कुछ नियंत्रित करना चाहते हैं, तो कंट्रोलर का सीधा इंस्टेंस उपयोग करें।

\n\n
// मूल ViewController में\nfunc showDetail() {\n    let storyboard = UIStoryboard(name: "Main", bundle: nil)\n    guard let detailVC = storyboard.instantiateViewController(withIdentifier: "DetailVC") as? DetailViewController else { return }\n    \n    detailVC.userID = 42\n    detailVC.userName = "Анна"\n    \n    navigationController?.pushViewController(detailVC, animated: true)\n}\n
\n\n

यह तरीका पूर्ण नियंत्रण देता है: आप नेटवर्क से डेटा लोड कर सकते हैं, उसकी जांच कर सकते हैं और फिर ट्रांज़िशन कर सकते हैं। जटिल लॉजिक के लिए बढ़िया।

\n\n

तरीका 3: Delegates (Delegate Pattern) — प्रतिक्रिया

\n

क्या होगा अगर डेटा वापस ट्रांसफर करना हो? उदाहरण के लिए, उपयोगकर्ता ने दूसरी स्क्रीन पर एक तारीख चुनी, और हम इसे पहली स्क्रीन पर वापस लाना चाहते हैं। यहाँ delegate मदद करता है।

\n\n

चरण 1: प्रोटोकॉल बनाएं

\n
protocol DatePickerDelegate: AnyObject {\n    func didSelectDate(_ date: Date)\n}\n
\n\n

चरण 2: चाइल्ड कंट्रोलर में delegate जोड़ें

\n
class DatePickerViewController: UIViewController {\n    weak var delegate: DatePickerDelegate?\n    \n    @IBAction func saveButtonTapped(_ sender: UIButton) {\n        let selectedDate = datePicker.date\n        delegate?.didSelectDate(selectedDate)\n        dismiss(animated: true)\n    }\n}\n
\n\n

चरण 3: पैरेंट कंट्रोलर में delegate लागू करें

\n
class MainViewController: UIViewController, DatePickerDelegate {\n    func didSelectDate(_ date: Date) {\n        print("प्राप्त तारीख: \\(date)")\n        // UI अपडेट करें\n    }\n    \n    override f                

ब्लॉग

पुस्तक अनुशंसाएँ