पर एक सेग्यू से पहले एक एसिंक्रोनस कॉल बनाना मेरे पास व्यू कंट्रोलर (एम्बेडेड नेविगेशन कंट्रोलर) का एक समूह है, और मुझे अगली स्क्रीन पर सीगू करने से पहले मुझे कुछ एसिंक कॉल करने की आवश्यकता है। समस्या यह है कि जब मैं segue में मैप किए गए बटन पर क्लिक करता हूं, तब मुझे यह कॉल करने की आवश्यकता होती है, लेकिन चूंकि async कॉल अभी तक वापस नहीं आया है, इसलिए segue बनाया गया है और अगला दृश्य नियंत्रक दिखाया गया है। एसिंक कॉल वापस आने से पहले दृश्य नियंत्रक नेविगेशन को रोकने के लिए लोग इस तरह की चीज कैसे करते हैं?अगले दृश्य नियंत्रक (स्विफ्ट)
उत्तर
टी एल फोन करके वापस मुख्य थ्रेड पर होने की segue की जरूरत है; डॉ आप UIButton
के लिए @IBAction
बना सकते हैं और फ़ंक्शन के अंदर एसिंक कॉल बनाते हैं और समापन में मैन्युअल रूप से segue लॉन्च करते हैं dispatch_async(dispatch_get_main_queue()) {}
का उपयोग करके हैंडलर।
निम्न चित्र में की तरह अगले एक करने के लिए UIViewController
से अपने segue मैन्युअल सिर्फ Ctrl +खींचें बनाने के लिए:
और फिर आप segue के प्रकार का चयन करने देखेंगे इस तस्वीर में की तरह:
आप Show
प्रकार आप को देखने के पदानुक्रम में segue देख सकते हैं अपने बाएँ में चुनने के बाद इस तस्वीर में की तरह segue के लिए पहचानकर्ता सेट करने के लिए यह चुनें: मैन्युअल segue
साथ शुरू करने
आप आपकी समस्या को संभाल कर सकते हैं फ़ंक्शन performSegueWithIdentifier
, इंटरफ़ेस बिल्डर का उपयोग करके मैन्युअल रूप से सीगू बनाने के तरीके के बारे में बहुत सारे ट्यूटोरियल खोजने के लिए आप वेब पर संदर्भित कर सकते हैं।
एक बार जब आप segue बना दिया गया है आप इसे कहीं भी आप चाहते हैं, आपके मामले में कॉल कर सकते हैं के रूप में आप इसे एक completionHandler एक async की अंदर बुला जाएगा फोन आप के dispatch_async(dispatch_get_main_queue()) {}
फ़ंक्शन का उपयोग मुख्य थ्रेड में में डाल करने की आवश्यकता है ग्रांड सेंट्रल डिस्पैच।
कुछ इस कोड की तरह:
@IBAction func buttonTapped(sender: AnyObject) {
asyncFunction() {
dispatch_async(dispatch_get_main_queue()) {
self.performSegueWithIdentifier("someID", sender: sender)
}
}
}
संपादित: ध्यान दें कि स्विफ्ट 3 में वाक्य विन्यास बदल गया:
@IBAction func buttonTapped(_ sender: AnyObject) {
asyncFunction() {
DispatchQueue.main.async {
self.performSegueWithIdentifier("someID", sender: sender)
}
}
}
मुझे आशा है कि यह आप में मदद करता है।
अच्छी तरह से विचार करते हुए कि मैंने आईबी में सेगू बनाया है बटन से अगले दृश्य नियंत्रक को खींचने के लिए ctrl, मैं "दृश्यों के पीछे" किस तरह की सीगू क्रिया को रद्द कर सकता हूं? क्या वह अभी भी निष्पादित नहीं होगा? – u84six
सीगू रद्द करने के साथ आपका क्या मतलब है? –
ठीक है अगर मैं नियंत्रक को देखने के लिए बटन से खींचता हूं, तो जब मैं बटन पर क्लिक करता हूं तो segue होगा। यह मेरे कोड में नहीं होता है। जब आप कनेक्शन बनाते हैं तो यह दिया जाता है (मैंने जो क्रिया चुनी है वह "शो" है)। – u84six
ऐसा लगता है जैसे आप इसे समकालिक रूप से चलाने के लिए देख रहे हैं; ताकि आप GCD कॉल dispatch_sync
उपयोग कर रहे हैं के बजाय dispatch_async
की पृष्ठभूमि धागे पर बड़े कार्य करने डाल, और जब आप डाल बातें dispatch_sync(dispatch_get_main_queue(), ^{ // handle error or segue }
क्या मैं यह कॉल करने में सक्षम हूं और प्रतीक्षा टाइमर भी दिखा सकता हूं? – u84six
आप बैकग्राउंड थ्रेड पर प्रेषण से पहले एक प्रतीक्षा टाइमर दिखा सकते हैं, और चीजों को मुख्य थ्रेड – aduflo
@aduflo पर वापस ले जाने के बाद इसे हटा सकते हैं, आपने कहा कि यह समस्या को संभालने के लिए अनुशंसित तरीका नहीं है, async कॉल मुख्य रूप से फ्रीज से बचने के लिए बना है यूआई के। –
- 1. स्विफ्ट स्टोरीबोर्ड: विभाजित दृश्य नियंत्रक ठीक से
- 2. आईओएस स्विफ्ट window.rootViewController बनाम वर्तमान दृश्य नियंत्रक
- 3. दृश्य नियंत्रक/पृष्ठ दृश्य नियंत्रक (स्विफ्ट) में छवि दृश्य पूर्ण स्क्रीन बनाएं
- 4. स्विफ्ट: पहले दृश्य नियंत्रक में स्वाइप अप पर एक और दृश्य नियंत्रक दिखाएं
- 5. नए दृश्य नियंत्रक को प्रस्तुत करने के बाद वर्तमान दृश्य नियंत्रक को खारिज करें - स्विफ्ट
- 6. दृश्य नियंत्रक
- 7. दृश्य नियंत्रक में संपादन मोड को स्विफ्ट/सक्षम करें
- 8. गतिविधि दृश्य नियंत्रक में एक स्क्रीनशॉट साझा करना - स्विफ्ट
- 9. स्विफ्ट में बाहरी ढांचे से दृश्य नियंत्रक कैसे पेश करें?
- 10. दृश्य दृश्य नियंत्रक को कैसे अपडेट करता है?
- 11. सी # वर्तमान दृश्य नियंत्रक स्टोरीबोर्ड में दृश्य नियंत्रक
- 12. एमवीसी विभिन्न नियंत्रक दृश्य
- 13. iPhone एक्स दृश्य नियंत्रक
- 14. अभिभावक दृश्य नियंत्रक
- 15. Yii नियंत्रक अनुरोधित दृश्य
- 16. वर्तमान मॉडल दृश्य नियंत्रक
- 17. बाल दृश्य नियंत्रक बदलें
- 18. जांच वर्तमान दृश्य नियंत्रक
- 19. दृश्य से नियंत्रक
- 20. स्विफ्ट: नया दृश्य
- 21. स्विफ्ट - साफ़ तालिका दृश्य
- 22. अगले उत्तरदाता या अन्य उप-दृश्य आईओएस
- 23. दृश्य नियंत्रक को प्राप्त करें जो दृश्य दृश्य नियंत्रक को धक्का देता है
- 24. मैं बाल दृश्य नियंत्रक से अभिभावक दृश्य नियंत्रक के दृश्य को कैसे एक्सेस कर सकता हूं?
- 25. वर्तमान टैब पर वर्तमान दृश्य नियंत्रक नेविगेशन नियंत्रक
- 26. एकाधिक मॉड्यूल दृश्य नियंत्रक रोशन
- 27. एएसपी MVC एक नियंत्रक/दृश्य
- 28. आईओएस एक ही दृश्य नियंत्रक
- 29. मैं कैसे एक दृश्य नियंत्रक
- 30. एक्सकोड: स्टोरीबोर्ड प्रारंभिक दृश्य नियंत्रक
क्या आपके पास कोई कोड दिखाने के लिए है? – iamalizade
न करें, इसे नए नियंत्रक – Wain
में करें, मैं इसे अगले नियंत्रक में नहीं कर सकता क्योंकि अगला दृश्य नियंत्रक केवल तभी प्रदर्शित किया जाना चाहिए जब एसिंक विधि सफल हो। – u84six