2013-12-08 14 views
8

जारी करने में विफल रहता है जब एक इंटरैक्टिव संक्रमण रद्द कर दिया जाता है, प्रस्तुत दृश्य नियंत्रक कभी जारी नहीं होता है (dealloc कभी नहीं कहा जाता है)। जब एक इंटरैक्टिव संक्रमण सफलतापूर्वक पूरा हो जाता है, तो सब अच्छा होता है, लेकिन जब यह संक्रमण रद्द हो जाता है, ऐसा लगता है कि गंतव्य दृश्य नियंत्रक कभी जारी नहीं होता है। नतीजा स्मृति हानि है, लेकिन स्मृति रिसाव नहीं है (कम से कम उपकरण द्वारा नहीं पता चला)। मैं कुछ गलत कर रहा था, लेकिन मुझे नहीं पता कि वह क्या है। चूंकि मैं इस सबूत को पाने में असमर्थ हूं कि किसी और को यह समस्या है, मुझे लगता है कि यह मैं हूं।आईओएस 7 इंटरैक्टिव संक्रमण का रद्दीकरण प्रस्तुत दृश्य नियंत्रक

मेरे पास एक बहुत छोटा नमूना प्रोजेक्ट है जो इस मुद्दे को प्रदर्शित करता है (https://github.com/mparma-isi/InteractiveTransitionIssue.git)। लाल वर्ग में एक टैप दूसरे दृश्य नियंत्रक में एक संक्रमण करता है। दूसरे नियंत्रक में एक टैप उस नियंत्रक को पहले वापस खारिज कर देता है। पहले व्यू कंट्रोलर के लाल वर्ग के अंदर एक चुटकी इशारा यूआईपीरेंटड्रिवेन इंटरेक्टिव ट्रांजिशन का उपयोग करके एक इंटरैक्टिव संक्रमण शुरू करता है। यदि आप संक्रमण को रद्द करते हैं (चुटकी की नकारात्मक वेग) प्रस्तुत दृश्य नियंत्रक जारी नहीं किया जाता है। यदि आप संक्रमण पूरा करते हैं, तो सभी काम अपेक्षित हैं।

किसी भी मदद के लिए अग्रिम धन्यवाद।

माइक

+0

मुझे लगता है कि मुझे जवाब देने में थोड़ा देर हो चुकी है, लेकिन मुझे भी इस मुद्दे का सामना करना पड़ रहा है। असल में, यह उन सभी उदाहरणों में मौजूद है जो मुझे मिल सकता है, इसलिए मुझे लगता है कि यह मानना ​​सुरक्षित है कि यह UIKit बग है। क्या आप एक कामकाज के साथ आए थे, शायद? – Nicky

+0

अभी भी सच है, कोई परिवर्तन? –

उत्तर

0

तो मैं लीक साधन के साथ इस प्रोफाइल और कुछ रोचक लगा:

Leaks instrument trace

ऐसा लगता है कि स्मृति रिसाव पर प्रकाश डाला लाइन से आता है। -[UIWindow _remoteRotationViewController:] कहीं भी कॉल नहीं है (जो कुछ भी है), इसलिए खिड़की हमारे प्रस्तुत दृश्य नियंत्रक को जिंदा रखती है।

हालांकि बहुत बदसूरत, इस समाधान मेरे लिए काम कर देता है:

- (void)animationEnded:(BOOL)transitionCompleted { 
    if (!transitionCompleted) { 
     UIViewController *viewController = ...; // get the presented view controller 

     UIWindow *window = [UIApplication sharedApplication].keyWindow; 
     SEL selector = NSSelectorFromString(@"_removeRotationViewController:"); 
     if ([window respondsToSelector:selector]) { 
#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Warc-performSelector-leaks" 
      [window performSelector:selector withObject:viewController]; 
#pragma clang diagnostic pop 
     } 
    } 
} 

मैं इस के लिए एक रडार दायर करने के लिए जा रहा हूँ।

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