2016-12-20 11 views
6

हमारा ऐप केवल पोर्ट्रेट मोड का समर्थन करता है। एक UIActivityViewController प्रस्तुत करना काम करता है।आईओएस: "संदेश" विकल्प के साथ साझा करते समय क्रैश

हालांकि, "संदेश" विकल्प के साथ साझा करने के अनुप्रयोग क्रैश हो:

*** न आया हुआ अपवाद 'UIApplicationInvalidInterfaceOrientation' की वजह से एप्लिकेशन समाप्त, कारण: 'समर्थित झुकाव आवेदन के साथ कोई आम अभिविन्यास का होता है, और [MFMessageComposeViewController shouldAutorotate] लौटा रहा है हाँ '

जैसे फेसबुक मैसेंजर के रूप में एक और विकल्प, के साथ साझा करना, काम करता है।

समान SO प्रश्नों से समाधान like this one काम नहीं करते क्योंकि वे सभी उन्मुखताओं का समर्थन करने का सुझाव देते हैं। हम केवल चित्र का समर्थन करना चाहते हैं।

1) हम पोर्ट्रेट अभिविन्यास का समर्थन करते समय "संदेश" शेयर विकल्प का समर्थन कैसे कर सकते हैं, जबकि केवल Info.plist में पोर्ट्रेट अभिविन्यास का समर्थन करते हुए?

2) हम Info.plist में केवल पोर्ट्रेट अभिविन्यास के साथ अन्य ऐप्स में "संदेश" शेयर विकल्प का समर्थन करने में सक्षम क्यों हैं, लेकिन यह नहीं? हमें डिबगिंग उद्देश्यों को कहां देखना चाहिए?

// Define share objects 
    let objectsToShare = ["test message"] as [Any] 

    // Configure UIActivityViewController 
    let activityViewController = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil) 
    activityViewController.excludedActivityTypes = 
     [UIActivityType.addToReadingList, 
     UIActivityType.assignToContact, 
     UIActivityType.print, 
     UIActivityType.copyToPasteboard] 

    // Define completion handler 
    activityViewController.completionWithItemsHandler = doneSharingHandler 

    // Show UIActivityViewController 
    present(activityViewController, animated: true, completion: nil) 
+0

आप कितने हैकिश जाने के इच्छुक हैं? मेरे जवाब में एक हैकिश प्रस्ताव देखें। –

+0

@LeoNatan हाहाहा एक प्रश्न जिसे आप कभी भी सुनना नहीं चाहते ... :) आपका जवाब जांचेगा और वहां टिप्पणी करेगा। आपकी सहायताके लिए धन्यवाद! – Crashalot

+0

मैंने आपके द्वारा किए जा रहे परीक्षण (केवल पोर्ट्रेट स्क्रीन अभिविन्यास का समर्थन करने) का परीक्षण करने के लिए थोड़ा सा नमूना ऐप बनाया है, और मैं वास्तव में उस समस्या को पुन: उत्पन्न करने में सक्षम नहीं हूं जिसका आप उद्धरण दे रहे हैं। मेरे पास ऐप स्टोर पर 2 या 3 ऐप्स हैं जो उपयोगकर्ताओं को 'UIActivityViewController' का उपयोग करके चीजों को साझा करने की अनुमति देते हैं। वे सभी चित्र केवल ऐप्स हैं, और मैंने कभी भी इस समस्या को संदेश, मेल या किसी अन्य साझाकरण विकल्प से पहले कभी नहीं देखा है। तो, मेरा सुझाव आपको आगे जांचना होगा कि ऐप वास्तव में कहां दुर्घटनाग्रस्त हो जाता है। मुझे लगता है कि आपको अपना कोड दोबारा बनाना चाहिए और यह सुनिश्चित करना चाहिए कि आप इस समस्या के कारण अपने कोड में कहीं और नहीं कर रहे हैं। मैं – pranjal

उत्तर

1

मैंने इस बग को पुन: पेश करने के लिए कुछ समय की कोशिश की और इसे क्रैश नहीं कर सका। अंततः जब मैं UIInterfaceOrientationPortrait लौटाता हूं तो मुझे यह सटीक क्रैश प्राप्त करने में सक्षम था जब मुझे अभिविन्यास कार्यों में से एक के लिए UIInterfaceOrientationMaskPortrait लौटा देना चाहिए था। supportedInterfaceOrientations के अपने व्यू कंट्रोलर के कार्यान्वयन की जांच करें और application:supportedInterfaceOrientationsForWindow:

+0

धन्यवाद जॉन! क्या आपने टेक्स्ट मैसेजिंग के साथ कुछ साझा करते समय इसे पुन: उत्पन्न करने का प्रयास किया था, या आपने इसे पुन: पेश किया था? दृश्य नियंत्रकों में से कोई भी मूल्य अभिविन्यास मान वापस नहीं करता है। हम संपूर्ण ऐप के लिए विश्व स्तर पर मूल्य निर्धारित करने के लिए एप्लिकेशन के प्लेस्ट पर भरोसा करते हैं, जो कि हमने बनाए गए अन्य ऐप्स के लिए काम करता है लेकिन किसी कारण से यह नहीं। – Crashalot

+0

यह एक टिप्पणी है, उत्तर नहीं। –

+0

@LeoNatan उन्होंने वास्तव में 'समर्थितInterfaceOrientations' के लिए हर जगह जांचने का सुझाव देकर समाधान (नीचे पोस्ट किया गया) का नेतृत्व करने में मदद की ... संक्षेप में, यह एक बेवकूफ बेवकूफ बेवकूफ देव त्रुटि थी। – Crashalot

1

अपने व्यक्तिगत दृश्य नियंत्रकों सब के सब supportedInterfaceOrientations को लागू करने UIInterfaceOrientationPortrait वापस जाने के लिए द्वारा, केवल पोर्ट्रेट समर्थन कर सकते हैं।

लेकिन अपने एप्लिकेशन, Info.plist या एप्लिकेशन प्रतिनिधि के application(_:supportedInterfaceOrientationsFor:), सभी झुकाव का समर्थन करना चाहिए, जिसका अर्थ है।

यह क्रम इस MFMessageComposeViewController जिस तरह से यह करना चाहता पेश करने के लिए अनुमति देगा, लेकिन अपने दृश्य नियंत्रक के सभी अभी भी केवल चित्र है, जो आप क्या चाहते हैं में हो जाएगा।

+0

यह सही समाधान है। –

+0

@LeoNatan प्रश्न को विशेष रूप से पूछने के लिए स्पष्ट किया गया था कि Info.plist – Crashalot

+0

@ क्रैशलोट में अन्य उन्मुखताओं का समर्थन किए बिना लक्ष्य कैसे पूरा किया जा सकता है। ठीक है, तो _Info.plist_ में अन्य अभिविन्यास का समर्थन न करें। ऐप प्रतिनिधि के 'एप्लिकेशन (_: समर्थित इंटरफेसऑरिएंटेशनफॉर:)' के बजाय उन्हें समर्थन दें। – matt

1

पर आपका कार्यान्वयन यहां एक बहुत ही हैशिश समाधान है जो केवल उस चित्र के लिए काम करना चाहिए जो केवल पोर्ट्रेट में प्रस्तुत करता है।

MFMessageComposeViewController पर एक श्रेणी बनाएं और केवल पोर्ट्रेट का समर्थन करने के लिए supportedInterfaceOrientations और shouldAutorotate ओवरराइड करें।

आपको इस श्रेणी को उद्देश्य सी में बनाने की आवश्यकता हो सकती है ताकि वास्तव में इसे संकलित किया जा सके, लेकिन यह काम करेगा।

@interface MFMessageComposeViewController (NoRotation) @end 
@implementation MFMessageComposeViewController (NoRotation) 

- (UIInterfaceOrientationMask)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 

- (BOOL)shouldAutorotate { 
    return NO; 
} 
+0

आपकी मदद के लिए फिर से धन्यवाद। upvoted! भ्रमित करने वाला अन्य ऐप्स में है, हम केवल info.plist में चित्र का समर्थन कर सकते हैं और 'MFMessageComposeViewController' के साथ कोई समस्या नहीं है, इसलिए' MFMessageComposeViewController' को ओवरराइड किए बिना लक्ष्य को पूरा करना संभव है या info.plist बदलना संभव है। हमारे ऐप में कारण को डीबग करने के संभावित कारणों को समझने की कोशिश कर रहा है। – Crashalot

+1

आपकी मदद के लिए धन्यवाद! अंत में कारण को ट्रैक किया, जो एक शर्मनाक बेवकूफ त्रुटि थी। यदि आप परवाह करते हैं तो नीचे देखें, लेकिन वैसे भी अपना जवाब ऊपर उठाया। एक बार फिर धन्यवाद! बीटीडब्ल्यू ... 45.के ... प्रभावशाली प्रतिनिधि! – Crashalot

0

स्ट्रे कोड (बुरा डेवलपर, बुरा डेवलपर, बुरा डेवलपर!) एप्लिकेशन में कहीं और बग का कारण बना।

कोड में कहीं और UINavigationController का विस्तार supportedInterfaceOrientations ओवरराइड करता है और हर किसी को यहां बेवकूफ बग पर समय बर्बाद करने का कारण बनता है। माफ़ कीजिये! उम्मीद है कि हमारी ढीलापन कुछ भविष्य के उपयोगकर्ता को लाभान्वित करती है, हालांकि।

एक्सटेंशन को हटाकर बग को ठीक किया गया।

यदि एसओ कभी भी आसपास के सबसे खराब डेवलपर्स को पहचानने और पुरस्कार देने का फैसला करता है, तो हम नामांकन के लिए खड़े होने से खुश हैं। :)

संबंधित मुद्दे