मैं लगभग एक महीने से इस बग पर अटका हुआ हूं। मैंने SegueFromRight नामक एक कस्टम सेगमेंट बनाया। मैं कुछ ऑनलाइन ट्यूटोरियल से कोड की बहुत अधिक प्रतिलिपि बनाता हूं। सेग्यू ने मेरे लॉगिन व्यू के लिए काम किया, लेकिन यह हमेशा बाद के दृश्य में दुर्घटनाग्रस्त हो गया। दृश्य पहले से ही प्रस्तुत किया गया था और एनीमेशन भी निष्पादित किया गया था। बहस के प्रदर्शन के कुछ सेकंड बाद यह दुर्घटनाग्रस्त हो गया और मुझे निम्न त्रुटि दी:

Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeed362ff8)

मैंने अपना व्यू चेक किया है और मुझे कोई लटकता हुआ आउटलेट नहीं मिला। और यह बहुत अजीब है कि यह त्रुटि तब नहीं हुई जब मैंने शो या शो विवरण जैसे मानक सेगमेंट का उपयोग किया। यह केवल तब हुआ जब मैंने इस कस्टम सेगमेंट का उपयोग करने का प्रयास किया। त्रुटि लाइन पर हुई:

src.present(dst, animated: false, completion: nil)

पूरा कोड नीचे चिपकाया गया है। इस लाइन द्वारा बुलाया गया कोड असेंबली में लिखा गया है (मुझे लगता है?) इसलिए मुझे डिबगिंग में मुश्किल हुई। मैंने उस पर गौर किया। बग सबसे कम libMainThreadChecker.dylib`checker_c पर हुआ, जिसे presentViewController में कहा जाता है। त्रुटि देने वाली रेखा है:

0x1064f8d98 <+26>:  callq  0x1064fa3da               ; symbol stub for: pthread_main_np

क्या कोई मेरी समस्या की पहचान कर सकता है? बहुत - बहुत धन्यवाद! और अगर आपको किसी और कोड की आवश्यकता है, तो बेझिझक एक टिप्पणी छोड़ दें।

class SegueFromRight: UIStoryboardSegue {

    override func perform() {
        moveInFromRight()
    }

    func moveInFromRight() {
        let src = self.source
        let dst = self.destination

        dst.view.transform = CGAffineTransform(translationX: src.view.frame.size.width, y: 0)
        src.view.superview?.addSubview(dst.view)

        UIView.animate(withDuration: 0.25, delay: 0, options: .curveEaseInOut, animations: {
            dst.view.transform = CGAffineTransform(translationX: 0, y: 0)
        }, completion: { finished in
            src.present(dst, animated: false, completion: nil) // gives the error
        })
    }

}
0
Jeffrey Yu 29 अक्टूबर 2018, 00:07

1 उत्तर

सबसे बढ़िया उत्तर

आप जो कर रहे हैं वह अवैध है। आप गंतव्य दृश्य पर परिवर्तन नहीं कर सकते हैं या गंतव्य दृश्य को सीधे उस तरह स्रोत दृश्य में नहीं जोड़ सकते हैं। यदि आपका लक्ष्य एक कस्टम एनीमेशन के साथ एक प्रस्तुतिकरण करना है, तो आपको अपनी प्रस्तुति के लिए एक उचित रूप से निर्मित कस्टम ट्रांज़िशन एनीमेशन लिखना होगा। तथ्य यह है कि आप एक कस्टम सेगमेंट का उपयोग कर रहे हैं, आपको कस्टम ट्रांज़िशन एनीमेशन कोड को इनकैप्सुलेट करने में मदद कर सकता है, लेकिन यह नियमों को नहीं बदलता है कि आपको यह कैसे करना चाहिए। आपको डेस्टिनेशन व्यू कंट्रोलर के modalPresentationStyle को .custom पर सेट करना होगा, इसके transitioningDelegate को सेट करना होगा, और किसी भी कस्टम प्रेजेंटेशन एनिमेशन की तरह ही UIViewControllerTransitioningDelegate या UIPresentationController सबक्लास या दोनों की आपूर्ति करनी होगी।

1
matt 28 अक्टूबर 2018, 21:18