আমি যখন আমার অ্যাপটি অনুকরণ করি তখন আমার এই সমস্যাটি হয়, এটি কোনও ত্রুটি বা সতর্কবার্তা নয় তবে এটি আমার কনসোলটিতে উপস্থিত হয়, এর আগে কেউ কি কখনও অভিজ্ঞতা পেয়েছে?
আমি যখন আমার অ্যাপটি অনুকরণ করি তখন আমার এই সমস্যাটি হয়, এটি কোনও ত্রুটি বা সতর্কবার্তা নয় তবে এটি আমার কনসোলটিতে উপস্থিত হয়, এর আগে কেউ কি কখনও অভিজ্ঞতা পেয়েছে?
উত্তর:
আমার ক্ষেত্রে, এই ত্রুটিটি ঘটে যখন আপনি খুব দ্রুত টেবিলভিউতে দুটি ট্যাব ক্লিক করেন।
ফলাফল ভুল শিরোনামের কারণ, পিছনে বোতাম অদৃশ্য। কেউ উল্লেখ করেছেন যে আপনি যখন কোনও দৃশ্যের দিকে ধাক্কা দেন set animated:NO
,। ত্রুটিটি অদৃশ্য হয়ে যাবে তবে তবুও কিছু অদ্ভুত আচরণের কারণ হয়। এটি দুটি দর্শনকে ঠেলে দেয়, তারপরে আপনাকে টেবিলভিউ স্ক্রিনটি ফিরে পেতে দুবার ফিরে যেতে হবে।
এই সমস্যাটি সমাধান করার জন্য আমি যে পদ্ধতিটি চেষ্টা করেছি:
যোগ করুন BOOL cellSelected;
ভিতরে viewWillAppear
cellSelected = YES;
didselectcell প্রতিনিধি মধ্যে 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
একটি NO সেট করুন , এবং এটি সমস্যার সমাধান করে। যেমন[self.navigationController pushViewController: viewController_Obj animated:NO];
নেভিগেশন কন্ট্রোলার ব্যবহার করে আমার একই সমস্যা ছিল এবং অন্যান্য কন্ট্রোলারকে এটিতে চাপ দেয়। আমি বাফার্ড নেভিগেশন কন্ট্রোলার এবং অন্যান্য বেশ কয়েকটি পদ্ধতি ব্যবহার করার চেষ্টা করেছি , তবে এটি আমার পক্ষে কার্যকর হয়নি। এটি নির্ধারণের জন্য কিছু সময় ব্যয় করার পরে আমি লক্ষ্য করেছি যে আপনি পূর্ববর্তী লেনদেন (অ্যানিমেশন) প্রগতি চলাকালীন (প্রায় 0.5 সেকেন্ড সময়কাল অনুমান করে) আপনি নতুন ভিউ নিয়ন্ত্রণকারীকে ধাক্কা দেওয়ার চেষ্টা করলে এই সমস্যাটি ঘটে occurs যাইহোক, আমি নেভিগেশন নিয়ামককে প্রতিনিধিত্ব করে এবং পূর্ববর্তী অ্যানিমেশন সমাপ্তির জন্য অপেক্ষা করে দ্রুত সমাধান করেছি।
নিশ্চিত করুন যে আপনি সেই পদ্ধতিগুলির ওভারলোডে যথাযথ সুপার পদ্ধতিটি কল করতে -ভিউ উইল অ্যাপয়ার, -ভিউডিডঅ্যাপার, -ভিউডিডলিড, -ভিউ উইলডিস্পায়ার, -ভিউডিডিস্পিয়ার ভুলে যাবেন না। উদাহরণস্বরূপ, আমার ক্ষেত্রে আমি পদ্ধতির নামটি এর সাথে মেলে না:
-(void)viewDidAppear
{
[super viewDidDisappear];
//some code staff
..
}
লক্ষ্য করুন যে উপস্থিত এবং অদৃশ্য পদ্ধতি মেলে না
super.viewWillAppear()
মধ্যে viewDidDisappear()
।
'ভারসাম্যহীন কলগুলির জন্য উপস্থিতির রূপান্তর শুরু / শেষ করতে হবে'
বলছেন শেষ সংক্রান্ত অ্যানিমেশনটি শেষ না হওয়ার আগে একটি অ্যানিমেশন শুরু হয়েছিল। সুতরাং, আপনি নতুনটিকে ধাক্কা দেওয়ার আগে কোনও ভিউ কন্ট্রোলারকে পপিং করছেন? বা শিকড় পপিং হতে পারে? যদি হ্যাঁ অ্যানিমেশন ছাড়া এটি করার চেষ্টা করুন[self.navigationController popToRootViewControllerAnimated:NO];
এবং দেখুন যে এটি সমস্যার সমাধান করে কিনা, আমার ক্ষেত্রে এটি কৌশলটি করেছে।
আমি এই সমস্যাটি পেয়েছি কারণ আমি ইউআইটিববার ছাড়া ভিউ কন্ট্রোলারের কাছ থেকে একটি ইউআইপিপ্রিন্ট ইনট্রাকশনকন্ট্রোলার এবং ইউআইএনএভিগেশনবারকে কল করছিলাম। দেখে মনে হচ্ছে যে ইউআইপিপ্রিন্টইন্ট্রাকশন কনট্রোলার সঠিক মুদ্রণপরিচালনা নিয়ন্ত্রণকারী প্যারেন্টভিউ কন্ট্রোলারটি পায় নি। প্রতিনিধিটিতে পদ্ধতিটি বাস্তবায়ন করা এবং বর্তমানের রুটভিউকন্ট্রোলারটি আমার পক্ষে কাজ করে ফিরে আসা।
- (UIViewController*)printInteractionControllerParentViewController:(UIPrintInteractionController*)printInteractionController;
আমার একইরকম সমস্যা ছিল যার মধ্যে মডেল ডায়ালগগুলি রিওয়াইন্ড করা জড়িত। সমাধান এখানে পোস্ট করেছেন ...
https://stackoverflow.com/a/38795258/324479
[সমস্যা]
ন্যাভ কন্ট্রোলার -> ভিসি 1 -পশ -> ভিসি 2 -পপওভার বা মডেল সেগু -> ভিসি 3।
ভিসি 3 ভিসি 1 এ অনিচ্ছাকৃত is
যখন ভিসি 2 থেকে ভিসি 3-তে সেগুটি পপওভার এবং মডেল হয়, আনইন্ডটি একটি সতর্কতার মধ্যে শেষ হয়: ইউআইভিউউকন্ট্রোলারের জন্য উপস্থিতি রূপান্তর শুরু / শেষ করতে ভারসাম্যহীন কলগুলি "
ভিসি থেকে ভিসি পর্যন্ত সেগু যদি চাপ দেয় তবে সতর্কতা চলে যায় is
[সমাধান]
আনমন্ড করা যুক্তি যদি এটির যত্ন নেয় তবে দুর্দান্ত হবে। সম্ভবত এটি একটি বাগ, সম্ভবত না। যে কোনও উপায়ে, সমাধানটি হ'ল ভিসি 2 (পপআপ রয়েছে এমন কন্ট্রোলার )টিকে রিওয়াইন্ডের টার্গেট তৈরি করা, তারপরে এনএভি কন্ট্রোলারের পপিংয়ের আগে এটি উপস্থিত হওয়ার জন্য অপেক্ষা করুন। এটি নিশ্চিত করে যে রিওয়াইন্ড (বিপরীত পপআপ) অ্যানিমেশনটিতে আরও পিছনে যাওয়ার আগে শেষ করার যথেষ্ট সময় রয়েছে। এমনকি অ্যানিমেশন বন্ধ থাকা সত্ত্বেও, এটি এখনও অপেক্ষা করতে হবে অন্যথায় আপনি ত্রুটি পান।
ভিসি 2 এর জন্য আপনার কোডটি নিম্নরূপ হওয়া উচিত। (সুইফ্ট)
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];
}
এটি মূলত বলছে যে ভিউ লাইফ চক্রটি সেই সময়ের জন্য আপনি প্রদর্শন করার চেষ্টা করছেন সেই দৃশ্যের জন্য নিয়ন্ত্রিত নয় C
চেষ্টা করার সময় আমারও একই সমস্যা রয়েছে:
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];
মত একটি ফাংশন - (void) popUpToLevelTwo;
, এবং return;
ফাংশন শেষে একটি রাখা সমস্যা সমাধান করে
আমি যখন ন্যাভিগেশনকন্ট্রোলারের পপ পদ্ধতিটি ব্যবহার করি তখন আমার একই সমস্যা হয় আমি আমার অ্যাপ্লিকেশনটিতে নেভিগেশন কন্ট্রোলারের জন্য একটি পৃথক যুক্তি ব্যবহার করি, সুতরাং নেভিগেশন বারের ব্যবহার এড়ানো এবং এটি সর্বদা গোপন থাকে। তারপরে আমি ব্যাকবটন এবং এটির ইভেন্টগুলি পরিচালনা করার জন্য একটি কাস্টম ভিউ এবং বিজ্ঞপ্তি ব্যবহার করি। বিজ্ঞপ্তি পর্যবেক্ষক নিবন্ধিত এবং অপসারণ করা হয় না। সুতরাং বিজ্ঞপ্তিটি দু'বার ছড়িয়ে পড়ে এবং এটি উল্লিখিত ত্রুটি তৈরি করে। এ জাতীয় ত্রুটি হওয়ার জন্য আপনার কোডটি পুরোপুরি পরীক্ষা করুন
এটি মূল্যবান কিসের জন্য, [super viewDidLoad:animated]
আমার viewDidLoad
ওভাররাইডে কোনও কল অন্তর্ভুক্ত না করার সময় আমি এই একই ত্রুটি পেয়েছি ।
আমি যখন এনআইবি থেকে বোতামটি ট্যাপ করেছিলাম তখনও আমার এই সমস্যা হয়েছিল। দেখা যাচ্ছে যে আমি ঘটনাক্রমে দুটি আইবিএশন পদ্ধতিতে ইভেন্ট পাঠানোর জন্য বোতামটি তারযুক্ত করে ফেলেছিলাম, যার প্রতিটিই একটি পুশভিউ কনট্রোলার করেছে: অ্যানিমেটেড:
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];
আপনি যদি কোনও ইউআইভিউকন্ট্রোলারটিকে লোডিং শেষ করার আগে বরখাস্ত করার চেষ্টা করেন তবে আপনি এটির মধ্যে দৌড়াতে পারেন।
আমার এই বার্তাটি কনসোলে ছিল এবং আমি সম্পূর্ণরূপে ইউআইভিউউকন্ট্রোলারের দিকে মনোনিবেশ করছিলাম যা কোনও সাফল্য ছাড়াই নতুন ইউআইভিউকন্ট্রোলার উপস্থাপন করছে। অবশেষে আমি আবিষ্কার করেছি যে সমস্যাটি আমি যে ইউআইভিউ কনট্রোলারটিতে উপস্থাপন করছিলাম তা হ'ল নিজেকে খারিজ করে দিচ্ছে কারণ ব্যবহারকারী তাদের অ্যাকাউন্টে লগইন হয়নি।
আশা করি এটি কাউকে সাহায্য করবে।
এটি আমার পক্ষে কঠিন ছিল: আমি ওভাররাইড করেছি
override func shouldAutomaticallyForwardRotationMethods() -> Bool {
return true
}
ওভাররাইড ছাড়াই:
override func shouldAutomaticallyForwardAppearanceMethods() -> Bool {
return true
}
আমার উইন্ডো রুট নেভিগেশন নিয়ামক। তারপরে উল্লিখিত সতর্কতা সহ অন্য ভিউ কন্ট্রোলারটিকে চাপ দেওয়ার সময় কোনও শিশু নেভিগেশন নিয়ন্ত্রক অভিযোগ করেছিলেন। সতর্কবার্তাটি সবচেয়ে খারাপ ছিল না, বড় সমস্যাটি ছিল, সেখানে শিশু নেভিগেশন নিয়ন্ত্রকের প্রতিনিধিকে আর ডাকা হয়নি। ক্লান্ত