मेरे पास यह समस्या है जब मैं अपने ऐप का अनुकरण करता हूं, इसकी कोई त्रुटि या चेतावनी नहीं है, लेकिन यह मेरे कंसोल में दिखाई देता है, क्या किसी ने पहले कभी इसका अनुभव किया है?
मेरे पास यह समस्या है जब मैं अपने ऐप का अनुकरण करता हूं, इसकी कोई त्रुटि या चेतावनी नहीं है, लेकिन यह मेरे कंसोल में दिखाई देता है, क्या किसी ने पहले कभी इसका अनुभव किया है?
जवाबों:
मेरे मामले में, यह त्रुटि तब होती है जब आप एक तालिका के दो टैब को बहुत तेजी से क्लिक करते हैं।
परिणाम गलत शीर्षक का कारण बनता है, बैक बटन गायब हो जाता है। किसी ने, कि जब आप एक दृश्य धक्का उल्लेख किया set animated:NO
। त्रुटि गायब हो जाएगी लेकिन फिर भी कुछ अजीब व्यवहार का कारण बनता है। यह दो विचारों को धक्का देता है, तो आपको टेबलव्यू स्क्रीन वापस पाने के लिए दो बार बैक करने की आवश्यकता होती है।
विधि मैंने इस समस्या को हल करने के लिए कोशिश की:
जोड़ना BOOL cellSelected;
में viewWillAppear
cellSelected = YES;
inselectcell प्रतिनिधि if (cellSelected){cellSelected = NO; do action ; }
यह बहुत तेजी से दो अलग-अलग कोशिकाओं को क्लिक करने से रोकने में मदद करता है।
मेरे मामले में यह तब हुआ जब मैं [self performSegueWithIdentifier:@"SomeIdentifier" sender:self];
एक UINavigationController
आइटम के viewDidLoad
तरीके से शुरू हुआ ।
इसे viewDidAppear
विधि में स्थानांतरित करने से समस्या हल हो गई।
बहुत संभावना यह है कि viewDidLoad
सभी फैंसी एनिमेशन पहले से ही समाप्त नहीं हुए हैं, जबकि viewDidAppear
सब कुछ किया गया है।
मुझे भी यही समस्या है। मुझे इस समस्या के दो समाधान मिले:
UINavigationController
जहां से इस समस्या का समाधान हुआ। बफर नेविगेशन नियंत्रकइससे बचने के लिए आपको अपना कोड अलग-अलग लूप में चलाना चाहिए
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];
});
dispatch_async
मुख्य कतार के अंदर मौजूद एनीमेशन को संलग्न किया जाए । इसके बारे dispatch_async
में बात यह है कि यह तब तक इंतजार करता है जब तक कि मुख्य कतार पर अन्य सभी एनिमेशन नहीं किए जाते हैं। देरी का उपयोग करने की तुलना में यह बहुत बेहतर है क्योंकि: 1- आप कभी नहीं जान पाएंगे कि क्या देरी पर्याप्त है, यह आपके होस्ट डिवाइस पर निर्भर करता है 2- आप देरी को अति कर देंगे और कुछ अंतराल होगा। इसे dispatch_async(dispatch_get_main_queue(), ^{[self presentViewController:self.yourModalVC animated:YES completion:nil];});
मुझे एक ही मुद्दे के साथ बहुत समस्या थी। मैंने इसे इस तरह से हल किया
1) आप UIViewController's
नामित इनिशियलाइज़र का उपयोग नहीं कर रहे हैं initWithNibName:bundle:
। सिर्फ इसके बजाय इसका उपयोग करने का प्रयास करें init
।
2) कोई करने के animated:YES
लिए सेट , और उस समस्या को हल किया। जैसे।[self.navigationController pushViewController: viewController_Obj animated:NO];
नेविगेशन कंट्रोलर का उपयोग करते हुए मेरे पास एक ही मुद्दा था और अन्य नियंत्रकों को इसमें धकेल दिया। मैंने बफ़र किए गए नेविगेशन नियंत्रक और कई अन्य तरीकों का उपयोग करने की कोशिश की , लेकिन यह मेरे लिए काम नहीं किया। यह पता लगाने के लिए कुछ समय बिताने के बाद मैंने देखा कि यह मुद्दा तब होता है जब आप पिछले लेनदेन (एनीमेशन) को प्रगति में रखते हुए नए दृश्य नियंत्रक को धक्का देने की कोशिश करते हैं (लगभग 0.5 सेकंड की अवधि जो मुझे लगता है)। वैसे भी, मैंने नेविगेशन नियंत्रक को सौंपने और पिछले एनीमेशन खत्म होने के इंतजार के साथ त्वरित समाधान किया।
सुनिश्चित करें कि आप -viewWillAppear, -viewDidAppear, -viewDidLoad, -viewWillDisappear, -viewDidDisappear को अपने तरीकों के अधिभार में उचित सुपर विधि कॉल करने के लिए मत भूलना। उदाहरण के लिए मेरे मामले में मैंने इस तरह विधि नाम से बेमेल शादी की:
-(void)viewDidAppear
{
[super viewDidDisappear];
//some code staff
..
}
नोटिस जो दिखाई देते हैं और गायब हो जाते हैं, वे बेमेल हैं
super.viewWillAppear()
भीतर बुला रहा है viewDidDisappear()
।
'असंतुलित कॉल शुरू / अंत के लिए उपस्थिति परिवर्तन'
अंतिम संबंधित एनीमेशन नहीं होने से पहले एक एनीमेशन शुरू किया जाता है। तो, क्या आप नए को पुश करने से पहले किसी भी व्यू कंट्रोलर को पॉप कर रहे हैं? या रूट करने के लिए popping हो सकता है? यदि हाँ एनीमेशन के बिना ऐसा करने का प्रयास करें यानी[self.navigationController popToRootViewControllerAnimated:NO];
और देखें कि क्या यह मुद्दा हल करता है, मेरे मामले में यह चाल चली।
मुझे यह मुद्दा इसलिए मिला क्योंकि मैं UITabbar के बिना एक व्यू कॉन्ट्रोलर से UIPrintInteractionController बुला रहा था, और न ही UINavigationBar। ऐसा लगता है कि UIPrintInteractionController को सही PrintInteractionControllerParentViewController नहीं मिला। प्रतिनिधि में विधि को लागू करना और वर्तमान rootViewController को वापस करना मेरे लिए काम करता है।
- (UIViewController*)printInteractionControllerParentViewController:(UIPrintInteractionController*)printInteractionController;
मुझे इसी तरह की समस्या थी जिसमें मोडल डायलॉग्स को रिवाइंड करना शामिल था। समाधान यहां पोस्ट करें ...
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)
}
}
}
स्थिति तब हो सकती है यदि आप एक उप दृश्य के रूप में एक दृश्य दृश्य नियंत्रक के साथ जोड़ रहे हैं। सबसे अच्छा उपयोग करने के लिए:
-(void) viewDidAppear:(BOOL)animated {
[self presentViewController:self.yourModalVC animated:YES completion:nil];
}
यह मूल रूप से कह रहा है कि दृश्य जीवन चक्र उन दृश्यलेखकों के लिए सुव्यवस्थित नहीं है जिन्हें आप तब प्रदर्शित करने का प्रयास कर रहे हैं।
जब मैं नेवीगेशन कॉन्ट्रोलर के पॉप मेथड का इस्तेमाल किया है तो मुझे भी यही समस्या है। अपने ऐप में मैं नैविगेशन कंट्रोलर के लिए अलग लॉजिक का इस्तेमाल करता हूं, इसलिए नैविगेशन बार के इस्तेमाल से परहेज करता हूं और यह हमेशा छिपा रहता है। तब मैं बैकबटन को संभालने के लिए एक कस्टम दृश्य और अधिसूचना का उपयोग करता हूं और यह घटना है। अधिसूचना पर्यवेक्षक पंजीकृत हैं और उन्हें हटाया नहीं गया है। इसलिए अधिसूचना दो बार फायर करती है, और यह उपर्युक्त त्रुटि बनाती है। इस तरह की गलती होने के लिए अपने कोड की जांच करें
इसके लायक क्या है, मुझे यह वही त्रुटि मिली जब [super viewDidLoad:animated]
मेरे viewDidLoad
ओवरराइड में कॉल शामिल नहीं थी ।
जब मुझे एक NIB से एक बटन टैप किया तो मुझे भी यह समस्या हुई। यह पता चलता है कि मैंने गलती से बटन को दो IBAction तरीकों पर एक घटना भेजने के लिए वायर्ड किया था, जिनमें से प्रत्येक ने एक pushViewController: एनिमेटेड:
UIViewController
जब तक सभी डेटा डाउनलोड नहीं हो जाते , तब तक प्रतीक्षा करने के लिए मैंने कुछ तर्क लागू किए । इस तर्क में एक त्रुटि थी जिसके कारण धक्का दिया गयाUIViewController
बहुत जल्दी गया जबकि अभी भी एक और एपीआई कॉल जारी थी।
यह उसी के कारण UIViewController
दो बार धकेल दिया गया UINavigationController
और यह चेतावनी दी।
कारण संदेश के लिए: यह संदेश प्रदर्शित हो और आप जोर दे रहे हैं केवल यदि / से दूसरे दृश्य नियंत्रक पेश viewWillAppear
, loadView
, init
या viewDidLoad
वर्तमान दृश्य नियंत्रक की विधि
त्रुटि संदेश को हटाने का तरीका: अपने पुश / प्रेजेंटिंग कोड को viewDidAppear
विधि में ले जाएँ समस्या को हल करेंगे
स्विफ्ट 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)
}
मुझे यह समस्या तब हुई जब मैं ब्रेक सेट करना भूल गया; स्विच स्टेटमेंट में दृश्य को आगे बढ़ाने के बाद!
जैसे यहाँ:
case 1:{
SomeViewController *someViewController = [[SomeViewController alloc]initWithNibName:@"SomeViewController" bundle:Nil];
[self.navigationController pushViewController:someViewController animated:YES];
[someViewController release];
}
break; //Forgetting to set break here:
एक समाधान होगा,
[NSTimer scheduledTimerWithTimeInterval:0.05(or as required) target:self
selector:@selector(your_selector_method_to_push_the_view) userInfo:nil repeats:NO];
यदि आप लोड करने से पहले UIViewController को खारिज करने का प्रयास करते हैं तो आप इसमें भाग सकते हैं।
मेरे पास कंसोल में यह संदेश था और पूरी तरह से UIViewController पर ध्यान केंद्रित कर रहा था जो कि सफलता के बिना, नया UIViewController प्रस्तुत कर रहा था। मुझे अंततः पता चला कि समस्या UIViewController में थी जिसे मैं प्रस्तुत कर रहा था क्योंकि उपयोगकर्ता अपने खाते में लॉग इन नहीं कर रहा था।
आशा है कि यह किसी की मदद करता है।
यह मेरे लिए एक कठिन था: मैंने ओवरराइड किया है
override func shouldAutomaticallyForwardRotationMethods() -> Bool {
return true
}
ओवरराइडिंग के बिना:
override func shouldAutomaticallyForwardAppearanceMethods() -> Bool {
return true
}
मेरे विंडो रूट नेविगेशन नियंत्रक में। उपर्युक्त चेतावनी के साथ एक अन्य दृश्य नियंत्रक को धक्का देने पर एक बाल नेविगेशन नियंत्रक ने शिकायत की। चेतावनी सबसे खराब नहीं थी, बड़ी समस्या यह थी कि वहां बाल नेविगेशन नियंत्रक के प्रतिनिधि को नहीं बुलाया गया था। weired।