2012-03-15 22 views
7

मेरे पास एक UISplitViewController पर आधारित एक ऐप है जो स्प्लिट के मास्टरव्यू कंट्रोलर में एक्शनशीट दिखाता है। आईओएस 5.1 से पहले, मुझे विभाजन द्वारा प्रस्तुत पॉपओवर में एक्शन शीट पेश करने में कोई समस्या नहीं थी, लेकिन अब जाहिर है कि मास्टरकंट्रोलर को दिखाने के लिए नए "स्लाइड-इन" तरीके से कुछ गड़बड़ है।आईओएस 5.1 + UISplitViewController PortraitMode + UIActionSheet MasterController में = Assertion विफलता

बात यह है कि जब मैं किसी भी [actionSheet show ..] विधि का उपयोग करके एक्शनशीट प्रस्तुत करने का प्रयास कर रहा हूं, तो ऐप निम्न त्रुटि के साथ क्रैश हो जाता है (सटीक प्रविष्टि निम्न है)।

*** Assertion failure in -[UIActionSheet presentSheetInPopoverView:], /SourceCache/UIKit_Sim/UIKit-1914.84/UIActionSheet.m:1816 
sharedlibrary apply-load-rules all 
Error in re-setting breakpoint 1: 
Catchpoint 2 (throw)Error in re-setting breakpoint 1: 
Error in re-setting breakpoint 1: 
Current language: auto; currently objective-c 

मैं थोड़ी देर के लिए यह गूगल, लेकिन कोई पर्याप्त जवाब .. कुछ लोग कहते हैं यह नई SplitViewController में एक बग हो सकता है ...

विचार?

अग्रिम धन्यवाद!

अद्यतन: मैंने एक संभावित जेनेरिक वर्कअराउंड पोस्ट किया, इसे जांचें। यदि यह आपके लिए काम करता है, तो एक टिप्पणी छोड़ दो .... अगर यह ठीक है, तो मैं इसे दो दिनों में सही के रूप में चिह्नित करूंगा

+0

अच्छा वास्तविक दावा क्या है? हमें कंसोल से संदेश दें। –

+0

मैंने सटीक दावे के साथ प्रश्न संपादित किए ..धन्यवाद – Omer

+0

इसके बाद हमें कंसोल में अगले दस या तो लाइनों की आवश्यकता है। –

उत्तर

2

मुझे भी यही समस्या है।

एक वैकल्पिक हल जो दुर्घटना से बचाता है कम से कम इस तरह अपने UIActionSheet दिखाने के लिए है:

if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) { 
    [self.actionSheet showFromBarButtonItem:sender animated:YES]; 
} else { 
    [self.actionSheet showInView:self.view.window]; 
} 

तो पोर्ट्रेट मोड में, कार्रवाई चादर खिड़की के केंद्र में प्रदर्शित होता है। आदर्श नहीं है, लेकिन कम से कम यह दुर्घटनाग्रस्त नहीं है। और जब लैंडस्केप मोड में, यह सामान्य के रूप में व्यवहार करता है।

+0

मेरा जवाब जांचें और अपनी राय पर टिप्पणी करें – Omer

0

रखने के लिए पॉपओवर एक विशेष विकल्प पर इशारा करते हुए का असर एक अन्य विकल्प, आप वास्तव में निम्न कर सकते हैं: 1. अपनी खुद की UIPopover 2. UIPopover के अंदर अपनी खुद की UIViewController बनाएँ। 3. नव निर्मित UIViewController के अंदर UIActionSheet प्रदर्शित करें। 4. UPctionSheet के आकार से SetPopoverContentSize। 5. अंत में, पॉपओवर को खारिज करने के लिए अपने UIActionsheet की क्लिक की गई विधि को वायर करें।

थोड़ा और कोड लेता है, लेकिन आपको अधिकतर हिस्से के लिए पहले से ही वही कार्यक्षमता देता है, और UIActionsheet के लिए एक बहुत कम स्लाइड-प्रभाव है।

+0

मेरा उत्तर जांचें और अपनी राय – Omer

0

मुझे लगता है कि निम्नलिखित एक सामान्य समाधान नल फार्म के जवाब पर आधारित है:

CGRect windowsRect = [actionSheetContainerView convertRect:viewToPresentActionSheet.frame toView:actionSheetContainer.window]; 
[actionSheet showFromRect:windowsRect inView:actionSheetContainer.window animated:YES]; 

इस विंडो में actionSheet क्रोध होगा, लेकिन उनका कहना है सही दिशा

1

बस के रूप में OMZ टिप्पणी की, ऐसा लगता है इस मुद्दे को आईओएस 5.1.1 में सेब द्वारा हल किया गया है। इसलिए मैं इसे अपने ऐप के लिए चेंज लॉग के ज्ञात समस्या अनुभाग में जोड़ने का निर्णय लेता हूं, और वर्कअराउंड उपयोगकर्ताओं को आईओएस 5.1.1 में अपग्रेड करने का सुझाव देना है।

4

उपरोक्त के आधार पर, और डब्ल्यूडब्ल्यूडीसी में मेरी मदद करने वाले ऐप्पल इंजीनियर के बड़े सम्मान के साथ, यह समाधान है जो न केवल इस बग के आसपास काम करता है, बल्कि दाएं बटन पर पॉपओवर को भी इंगित करता है।

if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) 
    { 
     [actionSheet showFromBarButtonItem:self.actionSheetBarButtonItem animated:YES]; 
    } 
    else 
    { 
     CGRect windowsRect = [self.navigationController.toolbar convertRect:self.actionSheetBarButtonItem.customView.frame toView:self.view.window]; 

     [actionSheet showFromRect:windowsRect inView:self.view.window animated:YES]; 
    } 
+0

पर क्लिक करें यदि यह एक कस्टम बटन नहीं है, तो आपको नेविगेशन कंट्रोलर.व्यू से गणना करना होगा क्योंकि रेक्ट का स्थान कोई कस्टम व्यू नहीं है। – Conor