<FirstViewController: 0x2a2c00> के लिए उपस्थिति परिवर्तन शुरू / समाप्त करने के लिए असंतुलित कॉल


93

मेरे पास यह समस्या है जब मैं अपने ऐप का अनुकरण करता हूं, इसकी कोई त्रुटि या चेतावनी नहीं है, लेकिन यह मेरे कंसोल में दिखाई देता है, क्या किसी ने पहले कभी इसका अनुभव किया है?


क्या आप उस दृश्य नियंत्रक में किसी प्रकार का एनीमेशन बनाते हैं?

1
हाँ। मेरे पास एक प्रारंभिक एनीमेशन है जो छवियों को अलग करता है, मैंने अब इस त्रुटि को देखा है जब मैं फोन पर कोड लोड कर रहा हूं।
सी। जॉन्स

त्रुटि संदेश आपको एक संक्रमण शुरू करने का सुझाव देता है लेकिन संबंधित अंतिम विधि के लिए एक गायब कॉल है।

1
एक ही बात समझी। इसके लिए कोई उपाय?
सीफिश

इसके लिए एक संकल्प की तलाश में
बारफून

जवाबों:


48

मेरे मामले में, यह त्रुटि तब होती है जब आप एक तालिका के दो टैब को बहुत तेजी से क्लिक करते हैं।

परिणाम गलत शीर्षक का कारण बनता है, बैक बटन गायब हो जाता है। किसी ने, कि जब आप एक दृश्य धक्का उल्लेख किया set animated:NO। त्रुटि गायब हो जाएगी लेकिन फिर भी कुछ अजीब व्यवहार का कारण बनता है। यह दो विचारों को धक्का देता है, तो आपको टेबलव्यू स्क्रीन वापस पाने के लिए दो बार बैक करने की आवश्यकता होती है।

विधि मैंने इस समस्या को हल करने के लिए कोशिश की:

जोड़ना BOOL cellSelected;

में viewWillAppear cellSelected = YES;

inselectcell प्रतिनिधि if (cellSelected){cellSelected = NO; do action ; }

यह बहुत तेजी से दो अलग-अलग कोशिकाओं को क्लिक करने से रोकने में मदद करता है।


5
मेरा अनुमान है कि कुछ शब्द समझना कठिन था। पठनीयता बढ़ाने के लिए मैंने कुछ संपादन किए।
काइल क्लेग

42

मेरे मामले में यह तब हुआ जब मैं [self performSegueWithIdentifier:@"SomeIdentifier" sender:self];एक UINavigationControllerआइटम के viewDidLoadतरीके से शुरू हुआ ।

इसे viewDidAppearविधि में स्थानांतरित करने से समस्या हल हो गई।

बहुत संभावना यह है कि viewDidLoadसभी फैंसी एनिमेशन पहले से ही समाप्त नहीं हुए हैं, जबकि viewDidAppearसब कुछ किया गया है।


धन्यवाद। मैं अपने आप को गुफाओं के युग में खो गया था जहाँ मैं हर एक UI तत्व थ्रू कोड बना रहा था। स्टोरीबोर्ड सामान मेरे लिए नया है।
किरण कुलकर्णी

21

मुझे भी यही समस्या है। मुझे इस समस्या के दो समाधान मिले:

  1. आप इस समाधान को ऊपर देख सकते हैं।
  2. मुझे उपवर्ग मिला UINavigationControllerजहां से इस समस्या का समाधान हुआ। बफर नेविगेशन नियंत्रक

15

इससे बचने के लिए आपको अपना कोड अलग-अलग लूप में चलाना चाहिए

 double delayInSeconds = 0.1;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            // Put your code here
[self presentViewController:self.yourModalVC animated:YES completion:nil];
        });

7
एक बेहतर विचार यह है कि dispatch_asyncमुख्य कतार के अंदर मौजूद एनीमेशन को संलग्न किया जाए । इसके बारे dispatch_asyncमें बात यह है कि यह तब तक इंतजार करता है जब तक कि मुख्य कतार पर अन्य सभी एनिमेशन नहीं किए जाते हैं। देरी का उपयोग करने की तुलना में यह बहुत बेहतर है क्योंकि: 1- आप कभी नहीं जान पाएंगे कि क्या देरी पर्याप्त है, यह आपके होस्ट डिवाइस पर निर्भर करता है 2- आप देरी को अति कर देंगे और कुछ अंतराल होगा। इसे dispatch_async(dispatch_get_main_queue(), ^{[self presentViewController:self.yourModalVC animated:YES completion:nil];});
आज़माइए

12

मुझे एक ही मुद्दे के साथ बहुत समस्या थी। मैंने इसे इस तरह से हल किया

1) आप UIViewController'sनामित इनिशियलाइज़र का उपयोग नहीं कर रहे हैं initWithNibName:bundle:। सिर्फ इसके बजाय इसका उपयोग करने का प्रयास करें init

2) कोई करने के animated:YESलिए सेट , और उस समस्या को हल किया। जैसे।[self.navigationController pushViewController: viewController_Obj animated:NO];


7

नेविगेशन कंट्रोलर का उपयोग करते हुए मेरे पास एक ही मुद्दा था और अन्य नियंत्रकों को इसमें धकेल दिया। मैंने बफ़र किए गए नेविगेशन नियंत्रक और कई अन्य तरीकों का उपयोग करने की कोशिश की , लेकिन यह मेरे लिए काम नहीं किया। यह पता लगाने के लिए कुछ समय बिताने के बाद मैंने देखा कि यह मुद्दा तब होता है जब आप पिछले लेनदेन (एनीमेशन) को प्रगति में रखते हुए नए दृश्य नियंत्रक को धक्का देने की कोशिश करते हैं (लगभग 0.5 सेकंड की अवधि जो मुझे लगता है)। वैसे भी, मैंने नेविगेशन नियंत्रक को सौंपने और पिछले एनीमेशन खत्म होने के इंतजार के साथ त्वरित समाधान किया।


धन्यवाद! ViewDidAppear में मेरे तर्क को स्थानांतरित करने से मेरी स्थिति में मदद मिली।
जारोस्लाव

7

सुनिश्चित करें कि आप -viewWillAppear, -viewDidAppear, -viewDidLoad, -viewWillDisappear, -viewDidDisappear को अपने तरीकों के अधिभार में उचित सुपर विधि कॉल करने के लिए मत भूलना। उदाहरण के लिए मेरे मामले में मैंने इस तरह विधि नाम से बेमेल शादी की:

-(void)viewDidAppear
{
 [super viewDidDisappear];
 //some code staff
 ..
}

नोटिस जो दिखाई देते हैं और गायब हो जाते हैं, वे बेमेल हैं


इस मुद्दे पर डिबगिंग में बस दो घंटे का समय लगा और यह वही निकला। super.viewWillAppear()भीतर बुला रहा है viewDidDisappear()
डेनियल वुड

इस टिप के लिए धन्यवाद। यह मेरी एकमात्र समस्या नहीं थी, लेकिन इससे मदद मिली!
एंथनी सी

4

'असंतुलित कॉल शुरू / अंत के लिए उपस्थिति परिवर्तन'

अंतिम संबंधित एनीमेशन नहीं होने से पहले एक एनीमेशन शुरू किया जाता है। तो, क्या आप नए को पुश करने से पहले किसी भी व्यू कंट्रोलर को पॉप कर रहे हैं? या रूट करने के लिए popping हो सकता है? यदि हाँ एनीमेशन के बिना ऐसा करने का प्रयास करें यानी[self.navigationController popToRootViewControllerAnimated:NO];

और देखें कि क्या यह मुद्दा हल करता है, मेरे मामले में यह चाल चली।


1
यह कुंजी है: एक ही समय में अन्य दृश्य-संचार संक्रमणों को पॉप या परिवर्तित करें।
रॉकी

2

मुझे यह मुद्दा इसलिए मिला क्योंकि मैं UITabbar के बिना एक व्यू कॉन्ट्रोलर से UIPrintInteractionController बुला रहा था, और न ही UINavigationBar। ऐसा लगता है कि UIPrintInteractionController को सही PrintInteractionControllerParentViewController नहीं मिला। प्रतिनिधि में विधि को लागू करना और वर्तमान rootViewController को वापस करना मेरे लिए काम करता है।

    - (UIViewController*)printInteractionControllerParentViewController:(UIPrintInteractionController*)printInteractionController;

2

मुझे इसी तरह की समस्या थी जिसमें मोडल डायलॉग्स को रिवाइंड करना शामिल था। समाधान यहां पोस्ट करें ...

https://stackoverflow.com/a/38795258/324479

[संकट]

नव नियंत्रक -> VC1 -Push -> VC2 -PopOver या मोडल सेगमेंट -> VC3।

VC3 वापस VC1 को खोल रहा है।

जब VC2 से VC3 तक का सेगमेंट पॉपओवर और मोडल है, तो खोलना एक चेतावनी में समाप्त होता है: UIViewController के लिए उपस्थिति परिवर्तन शुरू / समाप्त करने के लिए असंतुलित कॉल "

अगर वीसी से वीसी तक का तर्क धक्का है, तो चेतावनी दी गई है।

[उपाय]

यह बहुत अच्छा होगा अगर इक्का-दुक्का तर्क इस बात का ध्यान रखेंगे। शायद यह एक बग है, शायद नहीं। किसी भी तरह से, समाधान VC2 बनाने के लिए है (नियंत्रक जो पॉपअप है) रिवाइंड का लक्ष्य है, फिर इसके लिए प्रतीक्षा करें कि नौसेना नियंत्रक को पॉप अप करने से पहले प्रदर्शित होने के लिए समाप्त करें। यह सुनिश्चित करता है कि रिवाइंड (रिवर्स पॉपअप) एनीमेशन के पास आगे बढ़ने से पहले खत्म करने के लिए पर्याप्त समय है। एनिमेशन बंद होने के बाद भी, इसे अभी भी इंतजार करना होगा या फिर आपको त्रुटि मिलेगी।

VC2 के लिए आपका कोड इस प्रकार होना चाहिए। (स्विफ्ट)

class VC2: UIViewController {
    private var unwind = false
    @IBAction func unwindToVC1(segue:UIStoryboardSegue) {
        unwind = true
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        if unwind {
            self.navigationController?.popViewControllerAnimated(false)
        }
    }
}

1

स्थिति तब हो सकती है यदि आप एक उप दृश्य के रूप में एक दृश्य दृश्य नियंत्रक के साथ जोड़ रहे हैं। सबसे अच्छा उपयोग करने के लिए:

-(void) viewDidAppear:(BOOL)animated {
    [self presentViewController:self.yourModalVC animated:YES completion:nil];
}

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


1

जब मैं करने की कोशिश कर रहा हूँ तो मुझे भी यही समस्या है:

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];

एक फ़ंक्शन में - (void) popUpToLevelTwo;, और return;फ़ंक्शन के अंत में एक समस्या को हल करने के लिए


1

मुझे यह भी मिला

[self dismissModalViewControllerAnimated:YES];

मैंने YESएक को बदल दिया NO, और उस समस्या को हल कर दिया।


1

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


1

इसके लायक क्या है, मुझे यह वही त्रुटि मिली जब [super viewDidLoad:animated]मेरे viewDidLoadओवरराइड में कॉल शामिल नहीं थी ।


1
आप शायद viewDidAppear मतलब है? viewDidLoad का कोई पैरामीटर नहीं है
Fabio Napodano

1

जब मुझे एक NIB से एक बटन टैप किया तो मुझे भी यह समस्या हुई। यह पता चलता है कि मैंने गलती से बटन को दो IBAction तरीकों पर एक घटना भेजने के लिए वायर्ड किया था, जिनमें से प्रत्येक ने एक pushViewController: एनिमेटेड:


धन्यवाद !! तुम मेरा समय बचाओ !!
वीडी

1

UIViewControllerजब तक सभी डेटा डाउनलोड नहीं हो जाते , तब तक प्रतीक्षा करने के लिए मैंने कुछ तर्क लागू किए । इस तर्क में एक त्रुटि थी जिसके कारण धक्का दिया गयाUIViewController बहुत जल्दी गया जबकि अभी भी एक और एपीआई कॉल जारी थी।

यह उसी के कारण UIViewControllerदो बार धकेल दिया गया UINavigationControllerऔर यह चेतावनी दी।


1

कारण संदेश के लिए: यह संदेश प्रदर्शित हो और आप जोर दे रहे हैं केवल यदि / से दूसरे दृश्य नियंत्रक पेश viewWillAppear, loadView, initया viewDidLoadवर्तमान दृश्य नियंत्रक की विधि

त्रुटि संदेश को हटाने का तरीका: अपने पुश / प्रेजेंटिंग कोड को viewDidAppearविधि में ले जाएँ समस्या को हल करेंगे


1

स्विफ्ट 4

मेरा मुद्दा यह था कि मैं अपने वर्तमान को पूरा करने से पहले एक और वीसी पेश कर रहा था।

सॉल्यूशन एक देरी के बाद मेरा अगला एमवीसी पेश करना था।

आप क्या नहीं करेंगे

override func viewDidLoad() {
    super.viewDidLoad() 
    self.present(MyNextVC(), animated: true, completion: nil)
}

तुम्हे क्या करना चाहिए

override func viewDidLoad() {
    super.viewDidLoad() 
    //Wait until the view finished to be constructed
    perform(#selector(showMyNextVC), with: nil, afterDelay: 0.01)
}

@objc func showCityList() {
    self.present(MyNextVC(), animated: true, completion: nil)
}

1
देरी का उपयोग करने के बजाय मैं कोड को viewDidAppear या viewDidLayoutSubviews में डालूंगा।
प्रणव कासत्ती २१'१

0

मुझे यह समस्या तब हुई जब मैं ब्रेक सेट करना भूल गया; स्विच स्टेटमेंट में दृश्य को आगे बढ़ाने के बाद!

जैसे यहाँ:

case 1:{

        SomeViewController *someViewController = [[SomeViewController alloc]initWithNibName:@"SomeViewController" bundle:Nil];
        [self.navigationController pushViewController:someViewController animated:YES];
        [someViewController release];
    }

        break; //Forgetting to set break here:

0

जब आप नेविगेट करते हैं तो त्रुटि "असंतुलित कॉल शुरू / समाप्ति संक्रमण" के पीछे का कारण है एक ही समय में दो बार बहस करें


0

एक समाधान होगा,

[NSTimer scheduledTimerWithTimeInterval:0.05(or as required) target:self
selector:@selector(your_selector_method_to_push_the_view) userInfo:nil repeats:NO];

0

यदि आप लोड करने से पहले UIViewController को खारिज करने का प्रयास करते हैं तो आप इसमें भाग सकते हैं।

मेरे पास कंसोल में यह संदेश था और पूरी तरह से UIViewController पर ध्यान केंद्रित कर रहा था जो कि सफलता के बिना, नया UIViewController प्रस्तुत कर रहा था। मुझे अंततः पता चला कि समस्या UIViewController में थी जिसे मैं प्रस्तुत कर रहा था क्योंकि उपयोगकर्ता अपने खाते में लॉग इन नहीं कर रहा था।

आशा है कि यह किसी की मदद करता है।


0

यह मेरे लिए एक कठिन था: मैंने ओवरराइड किया है

override func shouldAutomaticallyForwardRotationMethods() -> Bool {
    return true
}

ओवरराइडिंग के बिना:

override func shouldAutomaticallyForwardAppearanceMethods() -> Bool {
    return true
}

मेरे विंडो रूट नेविगेशन नियंत्रक में। उपर्युक्त चेतावनी के साथ एक अन्य दृश्य नियंत्रक को धक्का देने पर एक बाल नेविगेशन नियंत्रक ने शिकायत की। चेतावनी सबसे खराब नहीं थी, बड़ी समस्या यह थी कि वहां बाल नेविगेशन नियंत्रक के प्रतिनिधि को नहीं बुलाया गया था। weired।


0

मेरे मामले में मैं अंदर से ' ' विधि NSDataसे ला रहा था ।NSURLviewDidLoad

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.