2014-09-05 6 views
9

मैं सिर्फ स्थापित किया है XCode6 बीटा-7 और अब मेरी PrepareForSegue तरीकों में से एक पर एक पहुँच अपवाद देख रहा हूँ - (कहा जाता है जब एक मॉडल Segue के बारे में तनाव कम करने के लिए है)xcode6 beta7 prepareForSegue फेंकता EXC_BAD_ACCESS

प्रश्न में कोड इस तरह दिखता है:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 


    if (segue.identifier == "MY_IDENTIFIER") { //EXC_BAD_ACCESS (code=1, address=0x0) 
     //Never gets here... 
    } 


} 

मैं segue पैरामीटर एक वैकल्पिक लेकिन जहां तक ​​स्विफ्ट का संबंध है, segue नहीं के बराबर नहीं है, तो भी नीचे की तरह एक चेक के साथ बनाने की कोशिश की है, मैं एक ही विफलता है ..

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject!) { 

    if (segue != nil) 
     if (segue!.identifier == "MY_IDENTIFIER") { //EXC_BAD_ACCESS (code=1, address=0x0) 
      //Never gets here... 
     } 
    } 


} 

आवेदन में अन्य सभी सीग ठीक काम करने लगते हैं, लेकिन यह असफल रहा है - और ऐसा लगता है कि यह केवल एक अनचाहे जारी होने के मामले में होता है। किसी और को इसका सामना करना पड़ा?

संपादित करें/वर्कअराउंड

एक सरल समाधान का unwindSegue विधि का उपयोग कर से बचने के लिए और बस dismissViewControllerAnimated कहते हैं, लेकिन मैं अभी भी पता करने के लिए क्यों unwindSegue विधि इस उदाहरण में विफल हो रहा है हमें खुशी होगी ...

बहुत धन्यवाद!

+0

बस एक विचार: क्या आपने बीटा 7 में अपग्रेड करने के बाद अपना निर्माण फ़ोल्डर साफ़ किया था? – zisoft

+0

एमएम .. या तो साफ के साथ कोई भाग्य नहीं। (हालांकि अच्छा अनुस्मारक - जिसने मुझे पिछले कुछ बीटाओं के साथ भी पकड़ा :) :) – Nash

+3

मुझे एक सेग के साथ एक ही समस्या थी। इसे आज़माएं: इंटरफ़ेस बिल्डर में प्रत्येक सेग्यू के लिए जो आपको मिला है * * पहचानकर्ता नहीं है, इसमें कुछ टाइप करें, इसे हटाएं, फिर वापसी करें। फिर पुनर्निर्माण और फिर कोशिश करें। मेरे पास कोई पहचानकर्ता नहीं था जिसे मैं पिछले बीटा में जोड़ता था, और यह था कि समस्या का कारण बन रहा था। नवीनतम एक्सकोड में इसे फिर से पहचानने के लिए इसे फिर से सेट करने के लिए मजबूर करके, मुझे लगता है कि मैंने xib में कुछ बदल दिया है जिसे नवीनतम बीटा में कुछ रनटाइम कोड से बिल्कुल मिलान करने की आवश्यकता है। –

उत्तर

14

चूंकि मैट गिब्सन ने सीगू पहचानकर्ता को जोड़ने और हटाने की समस्या को हल किया है।

बग का कारण यह है कि डिफ़ॉल्ट रूप से एक्सकोड सिग्नल को अनदेखा करने के लिए पहचानकर्ता नहीं जोड़ता है।

स्टोरीबोर्ड में डिफ़ॉल्ट खोलना segue इस तरह दिखता है:

<segue destination="foo" kind="unwind" unwindAction="unwind:" id="bar"/> 

ऑब्जेक्टिव-सी यह एक समस्या नहीं थी, segue.identifier नहीं के बराबर होगा। स्विफ्ट identifier में String, एक गैर-वैकल्पिक स्ट्रिंग के रूप में घोषित किया गया है। लेकिन पहचानकर्ता अभी भी स्टोरीबोर्ड में शून्य है, इसलिए एसडीके शून्य लौटाता है जहां उसने कहा कि यह एक गैर-वैकल्पिक स्ट्रिंग देता है। यह रनटाइम पर दुर्घटनाग्रस्त हो जाता है।

स्टोरीबोर्ड में पहचानकर्ता को बदलकर हटा दिया गया है तो पहचानकर्ता "", एक खाली स्ट्रिंग होगा।

<segue destination="foo" kind="unwind" identifier="" unwindAction="unwind:" id="bar"/> 

निश्चित रूप से कौन सा समस्या ठीक हो जाती है, क्योंकि कोई रिक्त स्ट्रिंग identifier गेटर की निर्दिष्ट वापसी मान से मेल खाता है।

मैंने इसके लिए radar दायर किया। आपको इसे Apples Bug Reporter

+0

कूल, खुशी है कि मैं सही दिशा में इंगित कर रहा था। दृश्यों के पीछे क्या हो रहा है में गहरी खुदाई के लिए धन्यवाद। –

+0

इसमें जोड़ने के लिए, मैं जिस सीगू का उपयोग कर रहा था वह समस्या नहीं थी क्योंकि इसकी पहचानकर्ता परिभाषित थी। मेरी समस्या स्टोरीबोर्ड में एक और सीगू था पहचानकर्ता नहीं था। –